728x90
반응형
포인터들이 배열로 있는 것을 포인터 배열이라한다.
배열 포인터는 배열을 가리키는 포인터로 하나의 포인터라면, 포인터 배열은 포인터가 여러개이다.
포인터 배열
int *ptr[4]; <-- 이런식으로 선언한다
4개의 각각의 칸이 포인터가 됨. 즉 4개의 칸이 각각 무엇인가를 가리키고 있다.
+) 배열 포인터는
int(*ptr)[4] --> 4개짜리 int형 배열을 가리키는 포인터
사용예시를 살펴보면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <stdio.h>
#include<string.h>
int main() {
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int* ptr[4];
ptr[0] = &a;
ptr[1] = &b;
ptr[2] = &c;
ptr[3] = &d;
for (int i = 0; i < 4; i++) {
printf("%d ", *ptr[i]);
}
}
|
cs |
이렇게 하면 결과는 10 20 30 40으로 출력된다.
기본배열인 arr의 값을 포인터 배열에 넣어서 똑같이 출력하려면 어떻게 해야할까??
arr의 원소들의 주소를 포인터배열에 넣고 *ptr[i]를 통해 포인터 배열에서 출력하면 된다!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include <stdio.h>
#include<string.h>
int main() {
int arr[4] = { 1,2,3,4 };
int* ptr[4];
for (int i = 0; i<4; i++) {
ptr[i] = &arr[i];
}
for (int i = 0; i < 4; i++) {
printf("%d ", *ptr[i]);
}
}
|
cs |
문자열을 출력할 때
1
2
3
4
5
6
7
8
9
10
|
#include <stdio.h>
#include<string.h>
int main() {
char str[] = "Hello";
printf("%s\n", &str[0]);
}
|
cs |
&str[0]이 들어가는데, %s의 의미가 0번째칸(시작하는 칸)부터 null문자가 나오기 전까지 출력하라는 뜻을 가지고 있기 떄문이다.
1
2
3
4
5
6
|
char strings[3][10] = { "Hello","world","j" };
for (int i = 0; i < 3; i++) {
printf("%s\n", strings[i]);
}
|
cs |
여기서 strings[i]는 &strings[i][0]의 의미를 가진다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
char strings[3][10] = { "Hello","world","j" };
char* p_str[3];
for (int i = 0; i < 3; i++) {
p_str[i] = &strings[i][0];
}
for (int i = 0; i < 3; i++) {
printf("%s\n", p_str[i]);
//그냥 문자열 출력할 떄 printf("%s\n",&str[0])이랑 똑같
}
|
cs |
그렇기에 6번째 줄에 p_str[i]=strings[i]로 고쳐도 무방하다.
10번째 줄에 왜 *p_str[i]를 안하지? 라는 의문이 생겼는데 그 이유는 문자열 출력할 때
printf("%s",&str[0])의 형태로 항상 주소값이 들어가야했는데 p_str[i]자체가 주소값이기 때문에 위의 예시 처럼 *를 넣어줄 필요가 없었다.
728x90
반응형
'C > 기초(두들낙서)' 카테고리의 다른 글
[C기초] 함수 반환/호출/프로토타입 (0) | 2022.01.09 |
---|---|
[C기초] 포인터와 배열 연습문제 (0) | 2022.01.08 |
[C 백준] 브론즈 3/ 세 수 (0) | 2022.01.02 |
[C기초] 배열 포인터 (0) | 2022.01.02 |
[C기초] 포인터 /포인터와 배열 (0) | 2022.01.02 |
댓글