티스토리 뷰

배운 것 기록/etc

[C++] 포인터

키죽 2022. 7. 12. 22:53

포인터

변수의 주솟값을 저장하는 공간

 

* 연산자 : 포인터 변수 주소 값에 있는 데이터

& 참조 연산자 : 변수의 주소 값을 불러온다

데이터타입 *포인터변수명=&변수명;
   int temp;
   int *p1;	// int형을 가리킬 수있는 포인터

   int **pp1;	// int형 포인터를 가리킬 수있는 포인터

 

1차원 배열에서 배열명만 단독으로 사용할 경우, 1차원 포인터와 동일

 

1차원 배열일 때 배열명[요소]형태 또는 *(배열명+요소),

1차원 포인터일 때 포인터[요소] 형태,

*(포인터+요소)일 경우 값을 가리킴

 

배열의 주소 배열명 == &배열명[0]
배열의 0번지 값 배열명[0] == *배열명

 

#include <stdio.h>
void main() {
	
    int a[3] = {1, 2};
    int *p = a;
    
    printf("%d %d %d\n", a[0], a[1], a[2]);
    printf("%d %d %d\n", *a, *(a+1), *(a+2));
    printf("%d %d %d\n", *p, *(p+1), *(p+2));
    printf("%d %d %d\n", p[0], p[1], p[2]);

}

값은 모두 1, 2, 0 

 

 

 

2차원 배열에서 배열명만 단독으로 사용할 경우, 2차원 포인터와 동일

2차원 배열일 때 배열명[요소] 형태, *(배열명+요소)는 1차원 포인터와 동일

1차원 포인터에 대해 *과 [ ]을 이용해야 값을 가리킬 수 있음

 

*(a+2) == a[2]

a[1] == *(a+1)
*(a[1]) == *(*a+1)) == **(a+1)

 

#include <stdio.h>
void main() {
	
    int a[3][2] = {1, 2, 3, 4, 5, 6};
    int *p[3] = {a[2], a[0], a[1]};
    
    printf("%d %d %d\n", a[0][0], a[1][0], a[2][0]);
    printf("%d %d %d\n", *a[0], *a[1], *a[2]);
    printf("%d %d %d\n", p[1][0], p[2][0], p[0][0]);
    printf("%d %d %d\n", *p[1], *p[2], *p[0]);

}

값은 모두 1, 3, 5

 

 

2차원 배열에서 배열명만 단독으로 사용할 경우, 2차원 포인터와 동일

2차원 배열일 때 배열명[요소][요소] *배열명[요소], **(배열명+요소)일 경우 2차원 배열의 값을 가리킴

 

#include <stdio.h>
void main() {
	
    int a[3][2] = {1, 2, 3, 4, 5, 6};
    int (*p)[2] = a;
    int (*q)[2] = a+1;
    
    printf("%d %d %d\n", a[0][0], a[0][1], a[1][0]);	// 1, 2, 3
    printf("%d %d %d\n", p[0][0], p[0][1], p[1][0]);	// 1, 2, 3
    printf("%d %d %d\n", q[0][0], q[0][1], q[1][0]);	// 3, 4, 5

}

'배운 것 기록 > etc' 카테고리의 다른 글

[Python] 자료형 - Set / List / 튜플 / 딕셔너리  (0) 2022.07.13
정규표현식  (0) 2022.07.07
정규화 과정  (0) 2022.07.05
댓글
최근에 올라온 글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함