본문 바로가기
공부/c++

#3 포인터 배열 | 포인터 배열과 배열 포인터의 차이 | 문자열과 포인터 배열 | c++

by 심심한 뾰 2021. 8. 11.
반응형

#포인터 배열의 정의 ,포인터 배열과 배열 포인터의 차이

'배열 포인터'와 '포인터 배열'이라는 두 단어가 비슷하기때문에 포인터 배열을 정의하면서 두 단어의 차이를 먼저 설명해보았다.

배열과 포인터 중 어떤 단어가 앞에 왔는지에 따라 단어의 정의가 바뀐다.

배열 포인터 : 배열을 가리키는 포인터

포인터 배열 : 포인터들이 배열

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

 

 

 

 

 

 

이 코드는 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

 

 

 

 

 

 

 

#포인터 배열과 문자열

 포인터 배열과 문자열에 대해 설명하기 전, 문자열 출력 원리를 설명해보자면,

문자열 출력 원리: 문자열은 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++ 최고의 강좌,,

반응형