Cのポインタ配列

1285 ワード

声明:char*lineptr[MAXLINES]
これはlineptrがMAXLINES個の要素を有する1次元配列であることを示す、配列の各要素は文字タイプオブジェクトを指すポインタである、すなわち、lineptr[i]は文字ポインタであり、*lineptr[i]はそのポインタが指すi番目のテキスト行の先頭文字である.
例:ポインタ配列の初期化(Cプログラム設計より抜粋)
  • 関数month_を記述するname(n)は、n番目の月の名前を指す文字列のポインタ(これも内部staticタイプ配列の理想的な応用である)
  • を返します.
    手順は次のとおりです.
    #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の長さが指定されていないため、コンパイラはコンパイル時に初期値の個数を統計し、この正確な数字を配列の長さに埋め込む.