data lab

C++ 포인터 개념 잡기 - 배열 관련 개념

LAB 관리자 2023. 10. 26. 22:49
반응형

본인, C언어에서 포인터를 너무 대충하고 넘어갔다. C++를 배우고 있는 지금, 지금이라도 포인터의 개념을 잡아보자. 사실 이건 포인터의 개념 전체는 아니고, 재귀함수로 주어진 배열의 모든 요소의 합을 구하는 거 하다가 내가 아래의 개념을 몰라서 이해가 안된다는 사실을 깨닫고 정리한다. 

#include<iostream>
using namespace std;

int main() {

	int arr[] = { 1,2,3,4,5 };

	int* p1; //배열의 이름(시작주소) 포인터 - 분리형 
	p1 = arr;
	int* p2; //배열의 첫번째 요소의 주솟값 포인터 -분리형 
	p2 = &arr[0];
	int* p3 = arr; //배열의 이름(시작주소) 포인터 - 합체형
	int* p4 = &arr[0]; //배열의 첫번째 요소의 주솟값 포인터 - 합체형
	
	cout << "[배열의 이름(시작주소) 포인터 - 분리형]" << endl << "p1의 값 :" <<p1 << endl << "*p1의 값 :" << *p1 << endl << "p1의 주소값 :" << &p1 << endl;
	cout << "[배열의 첫번째 요소의 주솟값 포인터 -분리형]" << endl << "p2의 값 :"<< p2 << endl << *p2 << endl << &p2  << endl;
	cout << "[배열의 이름(시작주소) 포인터 - 합체형]" << endl << "p3의 값 :"<< p3 << endl << *p3 << endl << &p3<<endl;
	cout << "[배열의 첫번째 요소의 주솟값 포인터 - 합체형]" << endl << "p4의 값 :"<< p4 << endl << *p4 << endl << &p4 <<endl;

	return 0;
}

포인터 함수 실행 화면

일단
1. int *p=arr;
2. int *p; p=arr;
3. int *p=&arr[0];
4. int *p; p=&arr[0]; 
의 *p값과 p값은, *p==arr[0]이고 p==&arr[0]으로 모두 같다.

*p의 값은 arr[0]이면서 사람 헷갈리게 왜 int *p=&arr[0]; 일까? 알았다!!!!! 포인터 p선언과 포인터 p를 arr[0]의 주솟값인 &arr[0]으로 초기화하는 두개의 분절된 과정을 하나의 문장으로 나타냈기 때문이다!!

그리고 arr는 배열의 이름, 즉 배열의 시작 주소, 즉 배열의 첫번째 요소의 주솟값, 즉 &arr[0]과 같은 말이다. 이 두개를 알고 난 다시 재귀함수놈한테 돌아가봐야겠다.
반응형