포인터 변수에 대한 접근
#include <stdio.h>
void main() {
int num = 3;
int* ptr1 = # //num의 주소를 저장하는 포인터 변수 ptr1
int** dptr = &ptr1; //포인터변수 ptr1의 주솟값을 저장하는 더블포인터
int* ptr2;
printf("%p %p\n", ptr1, dptr);
printf("%d %d\n", num, **dptr);
ptr2 = *dptr; //ptr1이 저장하고 있는 주소(*dptr)를 ptr2에 저장
*ptr2 = 9;
printf("%d %d\n", num, **dptr);
}
00000086EEAFF764 00000086EEAFF788
3 3
9 9
더블 포인터와 call by reference
#include <stdio.h>
void swapNumber(int** dptr1, int** dptr2) {
//더블 포인터 변수를 인자로 전달받는 함수
//주솟값의 교환
int* temp = *dptr1;
*dptr1 = *dptr2;
*dptr2 = temp;
}
int ex02() {
int num1 = 66, num2 = 99;
int* ptr1 = &num1;
int* ptr2 = &num2;
printf("*ptr1: %d *ptr2:%d\n", *ptr1, *ptr2);
swapNumber(&ptr1, &ptr2); //값의 교환이 아닌, 주소값의 교환이 이루어짐
printf("*ptr1: %d *ptr2: %d\n", *ptr1, *ptr2);
}
int main() {
ex02();
}
*ptr1: 66 *ptr2:99
*ptr1: 99 *ptr2: 66
다중포인터
#include <stdio.h>
void ex03() {
int num = 999;
int* ptr = #
int** dptr = &ptr;
int*** tptr = &dptr;
printf("%d %d %d %d", num, *ptr, **dptr, ***tptr);
}
int main() {
ex03();
}
999 999 999 999
#include <stdio.h>
int myFunc(int num1, int num2) {
printf("num1: %d num2: %d\n", num1, num2);
}
void ex04() {
int (*fptr)(int, int);
fptr = myFunc;//함수포인터 저장
fptr(9, 6);
}
int main() {
ex04();
}
num1: 9 num2: 6
함수도 메모리 공간에 저장되므로 주소 할당 됨
728x90
'Dev. > C++' 카테고리의 다른 글
메모리의 동적할당/malloc (0) | 2022.04.04 |
---|---|
구조체 (0) | 2022.04.04 |
c언어 난수 발생시키기/가위바위보/오름차순,내림차순 (0) | 2022.04.01 |
함수 심화 문제 /배열을 전달 받는 함수/call by value / call by reference (0) | 2022.03.30 |
함수의 이해 응용문제 (0) | 2022.03.28 |
댓글