생각해 볼 문제
씹어먹는 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 = # //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 = # //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 값을 가져올 수 있다.
씹어먹는 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 |