C Pointer 실습
Sunrin/Layer7

C Pointer 실습

생각해 볼 문제

https://modoocode.com/23

 

씹어먹는 C 언어 - <12 - 1. 포인터는 영희이다! (포인터)>

 

modoocode.com

문제 1 : * 와 & 연산자의 역할이 무엇인지 말해보세요.

 

*는 포인터가 가리키는 주소에 저장된 값을 반환하고

&는 변수의 주소값을 반환한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
    int *po; //po라는 정수형 포인터 변수 선언
    int num = 11;
 
    po = &num; //po에 num의 주소값을 대입
 
    printf("num 주소 : %d\n",&num); 
    printf("포인터 po : %d\n",po); 
    printf("포인터 po가 가리키는 값 : %d\n",*po);
  return 0;
}
cs

 

실행 결과

 

&을 사용해서 num의 주소값을 출력한다.

포인터 변수 po를 출력하면 num의 주소값이 출력된다.

*을 사용해서 po가 가리키는 num의 주소에 저장된 값 11을 반환한다.

 


문제 2 : int **a; 와 같은 이중 포인터(double-pointer) 에 대해 생각해 보세요.

 

이중 포인터는 포인터의 포인터이다.

선언은 문제에 쓰여있는 것처럼 * 을 두 개 써서 선언하면 된다.

 

포인터를 선언할 때 *의 개수에 따라 삼중 포인터, 사중 포인터,

그 이상도 만들 수 있다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
int main() {
    int *po1;
    int **po2; //이중포인터
    int num = 11;
 
    po1 = &num; //po1에 num1의 주소를 저장한다.
    po2 = &po1; //po2에 po1의 주소를 저장한다.
 
    printf("num1 : %d\n", num);
    printf("po1이 가리키는 값 : %d\n",*po1);
    printf("po2가 가리키는 값 : %d\n",**po2);
 
 
  return 0;
}
cs

 

 

위에 그림처럼 **po2가 num 값을 가져올 수 있다.

 

 

 


https://modoocode.com/24

 

 

씹어먹는 C 언어 - <12 - 2. 포인터는 영희이다! (포인터)>

 

modoocode.com

 

 

문제 1 : int arr[3][3]; 과 같은 배열은 내부적으로 어떻게 처리되는지 생각해보세요.

 

 

int arr[3][3]; 같은 배열은 2차원 배열이다.

1차원 배열까지는 행의 개념만 존재했지만

2차원 배열에는 열의 개념도 생긴다.

 

 

2차원 배열 선언

 자료형 배열이름[행][열];

 int array[3][3];

 

 

 

초기화

 자료형 배열이름[행][열] = { {..} , {..} , {..} , ... } ;

 int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};

 

 

 

int arr[3][3] 배열을 선언하고 초기화했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main() {
    //이차원배열
    int arr[3][3= {{1,2,3},{4,5,6},{7,8,9}};
    for(int i = 0; i<3; i++){
        for(int j = 0; j<3; j++){
            printf("%3d",arr[i][j]);
        }
        printf("\n");
    }
    printf("\n");
 
  return 0;
}
cs

 

배열의 원소가 이런식으로 채워졌을 것이다.

 

반복문으로 배열을 출력했다.

실행결과

 


문제 2 : int* arr[3]; 과 같은 배열이 가지는 의미는 무엇일까요?

- 포인터들로만 이루어진 배열이다.

- 배열의 각각의 원소를 포인터로 취급할 수 있다.

- 각 원소가 포인터이기 때문에 값이 주소이다.

 

'Sunrin > Layer7' 카테고리의 다른 글

Webhacking Project - PHP와 MySQL  (0) 2020.08.12
Dreamhack - Introduction of Webhacking 정리  (0) 2020.08.07
Stack Frame  (0) 2020.07.10
Python 문법  (0) 2020.07.08
C pointer  (0) 2020.06.24