int (*x)[10];
'de x
, 10 int
sBu beyan neden çalışmıyor?
dizisinin bir işaretçisidir. Neden bu kod neden derlenmiyor:
int arr[3] ;
int (*p)[3] =arr;
Ancak bu işe yarar:
int arr[3];
int (*p)[3] =&arr;
int (*x)[10];
'de x
, 10 int
sBu beyan neden çalışmıyor?
dizisinin bir işaretçisidir. Neden bu kod neden derlenmiyor:
int arr[3] ;
int (*p)[3] =arr;
Ancak bu işe yarar:
int arr[3];
int (*p)[3] =&arr;
arr
, bir int*
için değerlendiren bir ifadedir (bu, ünlü dizinin çürütücüsü olan "dizileridir" Ure).
&arr
, int (*)[3]
için değerlendiren bir ifadedir.
Dizi adları 'çürüme', sizeof
veya &
işleçlerine işlenenler dışında tüm ifadelerde dizinin ilk öğesinin işaretçilerine işaret eder. Bu iki işlem için, dizi isimleri 'arrayness' (C99 6.3.2.1/3 "Lvalues, diziler ve işlev göstergeleri") korur.
Bu tam olarak aynı nedenden dolayı çalışmaz:
int i;
int* pi = i; // error: no conversion from int to int*
+1: Ben de farklı bir tipte rağmen, her iki ifade aynı işaretçi adresi döndürebilir, işaret olur. –