여기 에 4 개의 정수 ptr배열 arr에 대한 포인터 가 있습니다. ptr전체 배열을 가리 킵니다. ptr[0]또는 *ptr배열의 첫 번째 요소를 가리 키므로 1을 추가하면 배열 ptr[0]의 두 번째 요소의 주소 가 제공됩니다.
사용 sizeof(ptr[0])하면 왜 첫 번째 요소의 크기가 아닌 16 바이트 전체 배열의 크기를 4 바이트로 제공 하는지 이해할 수 없습니다 ( 배열 ptr[0]의 첫 번째 요소를 가리킴).
int arr[4] = {0, 1, 2, 3};
int (*ptr)[4] = &arr;
printf("%zd", sizeof(ptr[0])); //output is 16
int *ptr = arr; 어야 합니까 ? 사실은 아닙니다. 네 값 의 전체 배열에 대한 포인터로 int (*ptr)[4]작성 합니다. 이와 같은 포인터 구문은 다차원 배열을 동적으로 할당하는 데 필요합니다. 중첩 루프로 생성 되고 다차원 배열로 잘못 설명 된 "2 차원 배열" 은 실제로 여러 개의 1 차원 배열에 대한 포인터의 1 차원 배열입니다. 참조 stackoverflow.com/questions/42094465/...ptrintmalloc()
int *ptr = arr;? 그러면 배열의 시작 (첫 번째 요소)을 가리키게됩니다&arr[0].