개발자 데뷔!

[C/C++ 7.3] 포인터 본문

프로그래밍 언어/C

[C/C++ 7.3] 포인터

물꼮이 2022. 3. 16. 00:48
// a 변수가 0xA1에 저장되어있고, b를 가리키고 있으며,
// b 변수가 0xB6에 저장되어있을 때 ,
// a: a가 가리키는 b의 주솟값 (0xB6)
// &a: a의 주솟값(0xA1)
// *a: a가 가리키는 b의 '값', 값이 저장되어있지 않을시, 다시 변수 b가 가리키는 변수의 주솟값

 

 

포인터 변수 선언

** 주의!

 포인터 변수는, 일일이 하나씩 전부 선언해주어야한다! 
char* ap, * bp, * cp;		// O
// char * ap,bp,cp;			// X 이렇게 한번에 하면 제일 앞에만 포인터 걸림 !!

 

포인터 연산

가능 )
          *p += 1; 
         (*p)++;
불가능)
          *p++;                     // 왜냐하면 이것은 *(p++)과 같아, p주소값에 1을 더한다는 뜻!!!

 

포인터 사용 

// 그냥 변수와 포인터 변수 type을 일치 시켜야 함 ! 
int main() {
	int a;
	char gd;
	cin >> a >> gd;
	int* p;
	p = &a;
	char* t;
	t = &gd;
	cout << *p<<" ";
	cout << *t<<" ";
	return 0;
}
int main() {
	int a, b;
	cin >> a >> b;				

	int* p;
	int* t;

	p = &a;
	t = &b;

	int tmp;
	tmp = *p;
	*p = *t;
	*t = tmp;

	cout << *p;
	cout << " ";
	cout << *t;

	return 0;
}

 

 


포인터배열

포인터 배열 초기화 방식

int* simData[5] = { &a, &b, &c, &d, &e };

 

EX)

// 1 번
int main() {
	int *simData[5];
	int a, b, c, d, e;
	cin >> a >> b >> c >> d >> e;
	simData[0] = &a;		// int* simData[5] = { &a, &b, &c, &d, &e }; :: 이 방식으로 한꺼번에 초기화 가능 !!!!
	simData[1] = &b;
	simData[2] = &c;
	simData[3] = &d;
	simData[4] = &e;
	int max, min;
	max = a;//*simData[0];
	min = a;
	for (int i = 0; i < 5; i++) {
		if (*simData[i] > max)
			max = *simData[i];
		if (*simData[i] < min)
			min = *simData[i];
	}
	cout << "MAX:" << max << endl;
	cout << "MIN:" << min << endl;

	return 0;
}

EX)

// 9번					
int main() {
	string str;
	int data[4];
	char* ptrs[4];	// 실제로 가리킬 것과 포인터 자료형 일치 !
	// 입력
	cin >> str;
	for (int i = 0; i < 4; i++)
		cin >> data[i];
	// 포인터 지칭
	for (int i = 0; i < 4; i++)
		ptrs[i] = &str[data[i]];
	// 출력
	for (int i = 0; i < 4; i++) {
		cout << *ptrs[i];
	}
	return 0;
}

포인터함수 

포인터 함수 사용방식 

기본적으로  int* a = &a 구조를 따름

함수 선언

void SWAP(int *a) {
	...
}

함수 사용

SWAP(&a);

 

EX)

// 5번
void SWAP(int *a, int *b) {	// int* a = &a, int *b = &b 
	int tmp = *a;
	*a = *b;
	*b = tmp;		// 값만 swap 하면, 굳이 return 안해도 값 바뀜
}
int main() {
	int a, b;
	cin >> a >> b;
	SWAP(&a,&b);		// 함수 사용시 주소를 넣음 
	cout << a << " " << b;
	return 0;
}