반응형
본인, 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]과 같은 말이다. 이 두개를 알고 난 다시 재귀함수놈한테 돌아가봐야겠다.
반응형
'data lab' 카테고리의 다른 글
C++ 반복함수와 재귀함수의 시간복잡도 비교하기 - 대학교 컴공 2학년 자료구조 과목 (0) | 2023.11.17 |
---|---|
사업을 한다는 것은 어떤 의미일까 - 현금흐름, 의사결정 게임 과 실행 (0) | 2023.10.30 |
C++ 순열(permutation) - 대학교 컴공 2학년 자료구조 과목 (0) | 2023.10.25 |
C++ 재귀 이진 검색 (Recursive binary search) - 대학교 컴공 2학년 자료구조 과목 (0) | 2023.10.24 |
C++ 이진 검색(binary search)이란 무엇일까? - 대학교 컴공 2학년 자료구조 과목 (0) | 2023.10.23 |