#포인터 배열의 정의 ,포인터 배열과 배열 포인터의 차이
'배열 포인터'와 '포인터 배열'이라는 두 단어가 비슷하기때문에 포인터 배열을 정의하면서 두 단어의 차이를 먼저 설명해보았다.
배열과 포인터 중 어떤 단어가 앞에 왔는지에 따라 단어의 정의가 바뀐다.
배열 포인터 : 배열을 가리키는 포인터
포인터 배열 : 포인터들이 배열
1
2
3
4
5
6
7
8
9
10
11
12
|
//배열 포인터 : 배열을 가리키는 포인터
//포인터 배열: 포인터들이 배열
#include<iostream>
int main(){
//int (*ptr)[4];//배열 포인터
//4개짜리 int형 배열을 가리키는 포인터
int *ptr[4]; //포인터 배열
}
|
cs |
이 코드는 포인터 배열을 정의 한 후, 각각 다른 변수들을 가르키게 만드는 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//배열 포인터 : 배열을 가리키는 포인터
//포인터 배열: 포인터들이 배열
#include<iostream>
int main(){
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int *ptr[4]; //포인터 배열
ptr[0] = &a;
ptr[1] = &c;
ptr[2] = &d;
ptr[3] = &b;
std::cout << *ptr[0] << " " << *ptr[1] << " " <<*ptr[2] << " " <<*ptr[3];
}
|
cs |
![](https://blog.kakaocdn.net/dn/cLCWXS/btrbOOHKIsu/iKixaC1xVyt5kJA0LNtqh1/img.png)
![](https://blog.kakaocdn.net/dn/byY1kS/btrbR4iW5Xb/j4rrLND3DNluzgr5ftFTT1/img.png)
이 코드는 for문을 사용해 포인터 배열이 가르키는 값을 정하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include<iostream>
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++){
std::cout << *ptr[i] << std::endl;
}
}
|
cs |
![](https://blog.kakaocdn.net/dn/bLkTik/btrbIIopRxF/aCcFtDI1183BeMdUV03G10/img.png)
![](https://blog.kakaocdn.net/dn/dzBY5g/btrbP9LCNFR/mOSKN8CZ9Kk6CVjffS2kG0/img.png)
#포인터 배열과 문자열
포인터 배열과 문자열에 대해 설명하기 전, 문자열 출력 원리를 설명해보자면,
문자열 출력 원리: 문자열은 0번째 주소(0번째를 가리키는 포인터)를 알려주면, null문자가 나올 때까지 출력한다.
따라서,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//배열 포인터 : 배열을 가리키는 포인터
//포인터 배열: 포인터들이 배열
#include<iostream>
int main(){
char str[] = "Hello"; //null문자를 포함한 6개의 char형 문자열이 만들어짐
//&str == &str[0]
//문자열 출력 원리: 문자열은 0번째의 주소(0번째를 가리키는 포인터)를 알려주면, null문자가 나올 때까지 출력한다.
std::cout << &str[0] << std::endl;
std::cout << str << std::endl;
std::cout << str[0] << std::endl;
}
|
cs |
"Hello"라는 문자열을 저장한 str배열에서
&str[0] 또는 str을 출력한다면 문자열 전체가 출력된다.
이번에는 저번 시간에 공부한 이차원 배열를 활용해 짠 코드다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//배열 포인터 : 배열을 가리키는 포인터
//포인터 배열: 포인터들이 배열
#include<iostream>
int main(){
char strings[3][10] = {"Hello", "World", "Doodle"};
char *p_str[3];
for (int i = 0; i < 3; i++){
p_str[i] = strings[i];
std::cout << p_str[i] << std::endl;
}
for(int i = 0; i < 3; i++){
std::cout << strings[i] << std::endl; //strings[i] 자체가 포인터가 됨
//strings[i]는 &strings[i][0]의 포인터가 됨
}
}
|
cs |
이차원 배열 strings 안에 문자열들이 저장된 모습이다.
포인터 배열이 가리키고 있는 모습이다.
출처(source) - 유튜브 두들낙서님
https://www.youtube.com/c/%EB%91%90%EB%93%A4%EB%82%99%EC%84%9C
두들낙서
C/C++ 강좌를 올리고 있고 다른 컨텐츠는 할 수도 있고 안 할 수도 있는 채널. ▶ 두들낙서 지식공유 서버 참가하기: https://discord.gg/y4SXcjU
www.youtube.com
c++ 최고의 강좌,,
'공부 > c++' 카테고리의 다른 글
#6 call-by-value | call-by-reference (0) | 2021.08.26 |
---|---|
#5 void함수에서 return을 사용하는 방법 (0) | 2021.08.26 |
#4 배열 총 문제 (0) | 2021.08.26 |
#2 배열과 포인터 | 포인터 간단 복습 | 포인터의 주소값 | 배열 포인터 | 2차원 배열과 배열 포인터 | c++ (0) | 2021.08.08 |
#1 이차원 배열 | 파스칼의 삼각형 | cin 다시 입력 받기 | 포인터 개념 | c++ | 기본 (0) | 2021.08.05 |