dereferenced 이중포인터의 연산에 질문
281
작성한 질문수 4
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 크기만큼 이동하는 이유가 있을까요?
답변 1
1
arr 의 원소는 double * 들입니다.
그리고 *arr + i 는 arr[i] 와 같은 표현이나 마찬가지입니다. (간접 참조 및 포인터 연산이므로)
질문자님께서는 arr[0] 와 arr[1] 의 "값"이 4 가 차이나야하지 않냐고 묻고 계신거에요!
int arr { 100, 200, 300 } 이라는 배열이 있다고 가정해보면
*arr + 2 는 arr[2] 와 같으며 300 이라는 "값"을 가져옵니다. *arr + 1 은 200이구요. (이 둘이 4씩 차이나는게 아니죠. 그저 값이 다른 것 뿐)
int 의 크기가 4byte 라는 것은 이 원소들의 "값"이 4 씩 차이나는 것이 아니라 원소들의 "주소"가 4 씩 차이난다는거죠! 4byte 크기의 메모리가 이웃해있는거니까요.
double* 배열인 arr의 *arr + i 은 말 그대로 이 double* 배열의 "원소 값"을 의미하며, 위의 예처럼 원소 값은 다양할 수 있습니다. 4씩 차이나야하는 것이 아니라 그냥 자유롭게 어떤 주소값(=double * 타입의 "값")이든 원소로 들어간다는거죠.
*arr + i 는 그저 해당 배열의 i 인덱스 원소 값을 간접참조로 가져오는 것일 뿐입니다.
Export template 안됨
1
63
2
완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.
1
88
3
main 함수에서 왜 int만 선언이 되는걸까요
1
78
2
8비트 2진수 변환시 왜 1을 더해야하나요?
1
75
2
혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?
1
78
1
프로토타입과 함수간의 인자 불일치
1
87
2
12.12 헤더 관련 질문
1
74
2
Visual Studio Community 2026 사용 문의
1
167
2
Q. 15:30, 부호가 있는 8비트 정수 질문
1
71
2
getchar(), putchar()
1
111
3
강의자리ㅛ
1
92
2
비주얼스튜디오코드로 공부해도 상관없나요?
1
127
2
소스파일안에 여러 파일
1
87
2
F5와 F7의 차이
1
90
2
c = TWO * (a+b); 에서 a와 b는?
1
67
2
; 세미콜론을 붙이는 기준에 문의
1
78
1
Step over 기능 문의
1
64
2
2.6 강의 따옴표 출력 규칙 문의
1
87
2
int main 함수 관련 오류 문의
1
76
2
13.4 words[0]
0
73
2
11.7 함수를 구현해 봤습니다.
1
67
2
11.6 직접 strcmp와 strncmp를 구현해 보았습니다.
1
71
2
11.6 my_strcat과 my_strncat을 구현해봤습니다.
1
60
2
11.6 fit_str함수를 구현해 봤습니다.
1
59
2





