동영상강좌까지 보고와서
main에서 p에 arr의 주소를 담았고 pp에 p의 주소를 담은 부분까지는 이해했습니다
*arr을 p로 치환한다면 p + i가 되어서
*(p + i)가 되고
*arr[i]가 되는거 같은데 arr[i]가 되는건가요....?
괄호를 없애는 순서랑 방법이 궁금해서 잘 이해가 가지 않습니다.
안녕하세요 길벗수험서 운영팀입니다.
회원님께서 어떤 문제를 보시고 질문을 하시는것인지 정확하게 모르겠습니다.
번거로우시더라도 몇년, 몇회, 몇번 문제의 문제인지
정확하게 알려주시면 해당 문제를 확인하고 정확한 답변을 드리겠습니다
행복한 하루되세요 :)
-
관리자2025-03-17 11:23:24
안녕하세요 길벗수험서 운영팀입니다.
회원님께서 어떤 문제를 보시고 질문을 하시는것인지 정확하게 모르겠습니다.
번거로우시더라도 몇년, 몇회, 몇번 문제의 문제인지
정확하게 알려주시면 해당 문제를 확인하고 정확한 답변을 드리겠습니다
행복한 하루되세요 :)
-
최*욱2025-03-18 10:13:58*arr이 배열 arr의 시작주소를 가리키는것은 이해했습니다 그런데 *(arr배열 시작주소(*arr) + i) 부분에서 제일 바깥쪽의 아스테릭(*)문자가 갑자기 사라져서요 int*** ppp = &pp이고 func(ppp, 5)라고 하고 *(*(*(*arr + i))) 형식으로 나온다면 ***arr + *i가 되는거 같은데 그래도 *(*(*(*arr + i)))이 arr[i]라고 이해하면 될까요??
-
관리자2025-03-17 19:33:19
안녕하세요 길벗수험서 운영팀입니다.
int* p = arr;
위의 코드는 정수형 포인터 변수 p를 선언하면서, 초기값으로 arr의 주소를 넣었으니 p는 arr의 시작 주소를 가르키고 있습니다
int** pp = &p;
위의 코드에서 정수형 이중포인터 변수 pp를 선언하면서, 포인터 변수 p의 주소를 저장하는데
p가 arr의 시작 주소를 가리키고 있으니 p의 주소를 가리키는 pp도 arr의 시작 주소를 가르키고 있습니다
func(pp, 5);
위의 코드에서 func함수를 호출할때 pp와 5를 인수로 호출합니다
void func(int** arr, int size)
위의 코드가 func함수가 시작되는곳인데, pp는 이중포인터 변수 arr이 받고, 5는 size가 받습니다
이때 이중포인터 변수 pp를 찾아가보면 main함수의 arr배열의 시작주소를 가지고 있습니다
int* p = arr;
위의 코드는 정수형 포인터 변수 p를 선언하면서, 초기값으로 arr의 주소를 넣었으니 p는 main함수의 arr의 시작 주소를 가르키고 있습니다
int** pp = &p;
위의 코드에서 정수형 이중포인터 변수 pp를 선언하면서, 포인터 변수 p의 주소를 저장하는데
p가 arr의 시작 주소를 가리키고 있으니 p의 주소를 가리키는 pp도 main함수의 arr의 시작 주소를 가르키고 있습니다
func(pp, 5);
위의 코드에서 func함수를 호출할때 pp와 5를 인수로 호출합니다
void func(int** arr, int size)
위의 코드가 func함수가 시작되는곳인데, pp는 이중포인터 변수 func함수의 arr이 받고, 5는 size가 받습니다
이때 이중포인터 변수 pp를 찾아가보면 main함수의 arr배열의 시작주소를 가지고 있습니다
*(*arr + i) 이코드에서 괄호안에 있는 *arr은 main함수의 arr배열의 시작주소를 가지고 있는것이고
괄호안에 보면 *arr+i 라고 되어있는데 *arr에 i값을 더하라는것은
만약 i의 값이 2라면 *arr이 500번지일때 숫자2를 더해 502번지가 되는것이 아닙니다
주소값에 +1을 하라는것은 int는 정수형(4byte)이니 자료형의 크기(4byte)만큼 주소값을 증가시키라는것입니다.
만약 주소값에 +2를 하라고 한다면 int는 정수형(4byte)이니 자료형의 크기(8byte)만큼 주소값을 증가시키라는것입니다.
해서 *arr + i 이식에서 arr 배열의 시작 주소에 i를 더한다는 것은 arr 배열의 i 번째 요소를 의미하는것이고 arr[i] 이렇게 표현할 수 있고
*(*arr + i) 은 arr[i]의 값을 의미하는것 입니다
교재에 있는 *(*arr + i) = (*(*arr + i) + i) % size 이코드는
arr[i] = (arr[i] + i) % size 와 동일한 코드 입니다
글로만 설명을 하려니 무척이나 힘드네요
이해가 될지 모르겠습니다
행복한 하루되세요 :)
-
최*욱2025-03-17 18:49:43아.. 제가 문제를 확인 못했었군요... 2024년 3회 19번 문제입니다