-4

次のコード フラグメントの場合:

 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の異なる値を示しています

4

4 に答える 4

1

警告あり:

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 *’
于 2012-12-17T09:02:04.223 に答える
0

ポインター コンテキストで使用すると、配列ptrの先頭を指し、 は配列の先頭を指します。これらは、メモリ内のまったく異なる場所を占める 2 つの異なる配列です。なぜそれらは同じでしょうか?ptraa

もちろん、ポインター値をで出力%uすることは犯罪です。を使用し%pます。それ%pがそのためです。

于 2012-12-17T09:03:00.463 に答える
0

これはポインタの配列です

*ptr[10]

これに a を割り当てたい場合は、次のようにします。

(*ptr)[10]
于 2012-12-17T09:04:43.447 に答える
0

uint *ptr[10]は同等でuint **ptrあり、割り当ては配列内の最初のオフセットに割り当てるもの*ptr = aと同じです。それ自体の値には触れません...ptr[0] = aaptrptr

次のいずれかを使用したい場合があります。

ptr = &a;

// Or
printf("%u %u",ptr[0],a);

// Or
unsigned int *ptr;
ptr = a;
于 2012-12-17T09:05:12.020 に答える