inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C언어

11.8 문자열의 포인터를 정렬하기

dereferenced 이중포인터의 연산에 질문

281

당황한 청어

작성한 질문수 4

0

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 크기만큼 이동하는 이유가 있을까요?

 

dereferenced c 이중포인터

답변 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