-4
#include<stdio.h>
int main(){
int a1[]={6,7,8,18,34,67};
int a2[]={23,56,28,24};
int a3[]={-12,27,-31};
int *y[]={a1,a2,a3};
int **a= y;
printf("%d\n",a[0][2]);
printf("%d\n",*a[2]);
printf("%d\n",*(++a[0]));
printf("%d\n",*(++a)[0]);
printf("%d\n",a[-1][1]);
return 0;
}
위의 코드 출력을 실행하면 8, -12,7,23,8입니다. 하지만 마지막 3 줄을C에서 포인터 배열의 음수 인덱스
printf("%d\n",*(++a[2]));
printf("%d\n",*(++a)[1]);
printf("%d\n",a[-1][1]);
출력이 8, -12,27,27,7로 변경하면됩니다. 마지막 printf 문을 이해할 수 없습니다. [-1] [무언가]는 어떻게 계산됩니까? 그리고 내게 따르면 *(++a)[1]
은 27 대신 56을 인쇄해야합니다!
음수 인덱스에 대해서는 [C에서 음수 배열 인덱스를 사용할 수 있습니까?] (https://stackoverflow.com/questions/3473675/are-negative-array-indexes-allowed-in-c) – Galen
'a' 배열이 아니므로 포인터입니다. 'a [-1]'은'* (a - 1)'과 동일합니다.'a'가 배열의 중간을 가리키면 괜찮습니다. 그리고 어제 우리는 [더욱 재미있는 예제가 있습니다] (https://stackoverflow.com/questions/47683569/can-someone-please-explain-me-this-pointer-c-code) –
@Galen 이미 읽었습니다. 그것은 부정적인 인덱스가 배열에 다시있는 경우입니다. 그러나 나는 그것을 여기에 적용 할 수 없다. – Prakhar