dereferenced 이중포인터의 연산에 질문
void prointIntArray(double** arr, int n)
{
for (int i = 0; i < n; ++i)
printf("%p \n", *arr + i);
printf("\n");
}
int main()
{
double* arr_i[] = { (double[]) { 0,1,2,3 }, (double[]) { 4,5,6,7,8 }, (double[]) { 9,10,11 } };
int n_i = sizeof(arr_i) / sizeof(arr_i[0]);
prointIntArray(arr_i, n_i);
return 0;
}
/* Output
006FFA34 // (double) 크기만큼 이동함을 확인할 수 있습니다.
006FFA3C // arr은 이중포인터니 *arr도 포인터 아닌가요?
006FFA44 // 이 값은 포인터 크기만큼 움직여야 할 것 같습니다.
*/
void printStrLiteral(char** arr, int n)
{
for (int i = 0; i < n; ++i)
printf("%p \n", *arr + i );
printf("\n");
}
int main()
{
char* arr[] = { "Cherry", "AppleBee", "Pineappple", "Apple", "Orange" };
int n = sizeof(arr) / sizeof(arr[0]);
printStrLiteral(arr, 5);
}
/* Output
00AC7E40 // 이중포인터를 dereference하여도 여전히 포인터입니다.
00AC7E41 // 포인터 + 1 연산을 했을 때 4byte를 이동해야할 것 같습니다.
00AC7E42 // base type 만큼 움직이고 있습니다.
00AC7E43
00AC7E44
*/
이중 포인터를 derefrence해도 pointer입니다. pointer 크기만큼 이동해야할 거 같은데 base type 크기만큼 이동하는 이유가 있을까요?