次のコード フラグメントの場合:
unsigned int *ptr[10];
int a[10]={0,1,2,3,4,5,6,7,8,9};
*ptr=a;
printf("%u %u",ptr,a);
私はcodepad.orgとideone.comをチェックしました。両方のコンパイラで、ptrとaの異なる値を示しています
警告あり:
pointer targets in assignment differ in signedness
format ‘%u’ expects type ‘unsigned int’, but argument 2 has type ‘unsigned int **’
format ‘%u’ expects type ‘unsigned int’, but argument 3 has type ‘int *’
ポインター コンテキストで使用すると、配列ptr
の先頭を指し、 は配列の先頭を指します。これらは、メモリ内のまったく異なる場所を占める 2 つの異なる配列です。なぜそれらは同じでしょうか?ptr
a
a
もちろん、ポインター値をで出力%u
することは犯罪です。を使用し%p
ます。それ%p
がそのためです。
これはポインタの配列です
*ptr[10]
これに a を割り当てたい場合は、次のようにします。
(*ptr)[10]
uint *ptr[10]
は同等でuint **ptr
あり、割り当ては配列内の最初のオフセットに割り当てるもの*ptr = a
と同じです。それ自体の値には触れません...ptr[0] = a
a
ptr
ptr
次のいずれかを使用したい場合があります。
ptr = &a;
// Or
printf("%u %u",ptr[0],a);
// Or
unsigned int *ptr;
ptr = a;