본문 바로가기

IT/C언어

C언어본색 연습문제 Part2.3.4

1. 문제 

 다음 그림을 보고 1단계에서 4단계까지를 나타내는 프로그램을 작성하세요. 단, 2단계에서는 ip1을 이용하여 num1의 값에 접근, 3단계에서는 ip2를 이용하여 num1의 값에 접근, 4단계에서는 ip3를 이용해서 num1의 값에 접근하는 코드를 작성하세요.


2. 결과 



3. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
 
int main()
{
    int num1 = 10;
    int* ip1 = NULL;
    int** ip2 = NULL;
    int *** ip3 = NULL;
 
    ip1 = &num1;
    ip2 = &ip1;
    ip3 = &ip2;
 
    printf("%d \n", num1);
 
    *ip1 = 20// *&num1
 
    printf("%d \n", num1);
 
    **ip2 = 30// *ip1 == *&num1
 
    printf("%d \n", num1);
 
    ***ip3 = 40// **ip2 = =*ip1 == *&num1  
 
    printf("%d \n", num1);
 
    return 0;
 
}
cs



4. 설명
다중 포인터와 *연산자를 이용해서 값을 참조하고 변경할줄 아는지 묻는 문제입니다.
ip가 주소를 받는 포인터이고, *는 주소의 값을 참조하는 연산자라는 사실은 앞서 배웠습니다.
그리고 핵심이 *&는 서로 상쇄되서 없는 것으로 취급된다는 것이죠.
ip = &num 이니까 *ip = *&num = num 그래서 *ip = 20이나 num = 20이나 똑같이 num변수에 20을 넣어라! 라는 의미가 됩니다.