Cのポインタ配列
1285 ワード
声明:char*lineptr[MAXLINES]
これはlineptrがMAXLINES個の要素を有する1次元配列であることを示す、配列の各要素は文字タイプオブジェクトを指すポインタである、すなわち、lineptr[i]は文字ポインタであり、*lineptr[i]はそのポインタが指すi番目のテキスト行の先頭文字である.
例:ポインタ配列の初期化(Cプログラム設計より抜粋)関数month_を記述するname(n)は、n番目の月の名前を指す文字列のポインタ(これも内部staticタイプ配列の理想的な応用である) を返します.
手順は次のとおりです.
これはlineptrがMAXLINES個の要素を有する1次元配列であることを示す、配列の各要素は文字タイプオブジェクトを指すポインタである、すなわち、lineptr[i]は文字ポインタであり、*lineptr[i]はそのポインタが指すi番目のテキスト行の先頭文字である.
例:ポインタ配列の初期化(Cプログラム設計より抜粋)
手順は次のとおりです.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *month_name(int n)
{
static char *name[13] = {
"Illegal month",
"January", "February", "March",
"April", "May", "June",
"July", "August", "September",
"October", "November", "December"
};
return (n < 1 || n > 12) ? name[0] : name[n];
}
int main()
{
int mon;
char *monthname;
printf("please input the month name :
");
scanf("%d", &mon);
monthname = month_name(mon);
printf("%s
", monthname);
return 0;
}
において、nameの宣言は1次元配列である、配列の要素は文字ポインタであり、i番目の文字列のすべての文字はメモリ内のある位置に格納、そのポインタはname[i]に格納される.上述の宣言では配列nameの長さが指定されていないため、コンパイラはコンパイル時に初期値の個数を統計し、この正確な数字を配列の長さに埋め込む.