int *a[4]; //指针数组
ポインター配列は、複数のポインターを一度に宣言することと同じです。配列の各要素はポインタです。わかりやすいので、主に配列ポインタを見てみましょう
int (*p)[4]; //数组指针
配列ポインタは、一度に 1 つのポインタを宣言するのと同じです。このポインタが非常に特殊な配列を指しているだけです。
[] は * よりも優先度が高いため、配列ポインターを宣言するときに () を追加する必要があります。
例 1:
#include<stdio.h>#include<stdlib.h>void main() { //数组指针的用法,用处。 int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。 //int *p2=&b; p=&b; int i=0; while(i<16) { printf("%d\t",(*p)[i]); //printf("%d\t",*p2++); i++; } }
printf("%d\t",(*p)[i]);出力配列 b を走査します;
配列ポインターは次のとおりです。キング オブ ダンス ゾンビと同じで、弟がいます。n は弟の数です。添え字の値を通じて、特定の弟、つまり配列内の番号に直接アクセスできます。
配列ポインタの添字は自動的に増加し (i)、ポインタのポイントは変更されません。
これは整数ポインターを使用して直接実装でき、より便利で簡潔です。上記のコメントセクションを参照してください。
例 2: 例 1 の while() ステートメントを置き換えます。
while(i<4) { printf("%d\t",(*p++)[0]); i++; }
例 2 は 1 5 9 13 を出力します。これは、ポインターが一度に 4 int.16 バイト移動するのと同等です。
配列ポインタがインクリメントされると (*p)、ポインタは移動 sizeof (type) を指します。
実際、上記の文は他の種類のポインタにも当てはまります。
int *p;
など //ポインタは整数ポインタである int を指します。整数ポインタの特徴は何ですか?整数変数を保存できるアドレスです。使用は何ですか?つまり、p は次の int 型の数値を指すことができます。では? 多くの場合、ポインタは配列を指すために使用されます。これらはすべて int 型なので、ステップ サイズが導出されます。整数ポインターのステップ サイズは sizeof(int) で、4 バイトです。
//同様に、float ポインター、char ポインターなどを取得できます。 。 。
同様に配列ポインタも取得できますが、その特徴は何でしょうか?配列の最初のアドレスを保存します。使用? p は次の配列を指すことができます。それで? 2 次元配列を指すために使用します。 2 次元配列の各要素は同じ型 (すべて int 配列) であるため、ステップ サイズを推定できますか? sizeof(int[4])、つまり 16
//率直に言うと、これは配列型
例 3:配列ポインタは 2 次元配列を指します。
#include<stdio.h>#include<stdlib.h>void main() { int a[3][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}}; int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。 p=&a; int i=0; while(i<3) { //printf("%d\t",(*p)[i]); //数组指针,指向的是一个数组整体,相当于指针也带了下标,当执行i++操作时,下标+1,得到该数组的下一个元素, //在该例中,指针没有位移,所以依次输出为1 2 3 printf("%d\t",(*p++)[0]); //整型数组类型的指针,指向的是一个数组整体,当执行*p++操作时,指针位移该数组长度的位数 //在该例中,即指针位移4个int的长度,所以输出是1 11 21 i++; } }
推奨チュートリアル: 「C ビデオ チュートリアル 」
以上が配列ポインタの用途は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。