728x90
반응형
포인터 복습
==포인터==
- 종류
int 포인터
float 포인터
char 포인터 등등...
//포인터 정의
#include <stdio.h>
int main()
{
int a = 5;
int* ptr;
//*(asterisk) 용도
//1. 포인터를 선언할 때
//2. 해당 주소에 값이 접근하는 용도
ptr = &a; //a의 주소값을 ptr에 넣어줌 & : 주소
printf("address of a is %x\n", &a);
printf("value of ptr is %x\n\n", *ptr);
printf("Integer size : %d\n", sizeof(int));
printf("Float size : %d\n", sizeof(float));
printf("Char size : %d\n\n", sizeof(char));
printf("Integer* size : %d\n", sizeof(int*));
printf("Float* size : %d\n", sizeof(float*));
printf("Char* size : %d\n", sizeof(char*));
return 0;
}
#include <stdio.h>
int swap(int* num1, int* num2)
{
int tmp;
tmp = *num1;
*num1 = *num2;
*num2 = tmp;
return 0;
}
int main(void)
{
int a = 5;
int b = 10;
int* ptr;
int* ptr2;
//두 값 바꾸기
printf("a=%d\nb=%d", a, b);
swap(&a, &b);
printf("\n\n after swap \n\n");
printf("a=%d\nb=%d", a, b);
ptr = &a;
ptr2 = &b;
printf("\n b - a = %d", *ptr2 - *ptr);
return 0;
}
//포인터와 어레이
#include <stdio.h>
int main(void)
{
char arr[6] = { "Hello" };
char* ptr;
ptr = &arr[0];
//연산자의 순서
printf("%c", *(ptr+1));
return 0;
}
포인터의 활용
// 1. 친구들의 주소
#include <stdio.h>
int main(void) {
// 철수 : 101호 -> 메모리 공소의 주소
// 영희 : 201호
// 민수 : 301호
// 각 문앞에 '암호'가 걸려있음
int 철수 = 1; //암호
int 영희 = 2;
int 민수 = 3;
printf("철수네 주소 : %d 암호 : %d\n", &철수, 철수);
printf("영희네 주소 : %d 암호 : %d\n", &영희, 영희);
printf("민수네 주소 : %d 암호 : %d\n", &민수, 민수);
printf("\n");
//미션맨 추가
//첫 번째 미션 : 아파트의 각 집에 방문하여 문에 적힌 암호 확인
int* 미션맨;
미션맨 = &철수;
printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &영희;
printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &민수;
printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
printf("\n");
//두 번째 미션 : 각 암호에 3을 곱해라
미션맨 = &철수;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &영희;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
미션맨 = &민수;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);
//스파이 추가
//미션맨이 바꾼 암호에서 2를 빼라!
int* 스파이 = 미션맨;
printf("\n ...스파이 미션 수행 중... \n\n");
스파이 = &철수;
*스파이 = *스파이 - 2; //철수 = 철수 -2;
printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
스파이 = &영희;
*스파이 = *스파이 - 2; //철수 = 철수 -2;
printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
스파이 = &민수;
*스파이 = *스파이 - 2; //철수 = 철수 -2;
printf("스파이가 방문하는 곳 주소 : %d, 암호 : %d\n", 스파이, *스파이);
printf(
"\n... 철수 영희 민수는 집에 오고서는 바뀐 암호를 보고 놀랐다...\n\n");
printf("철수네 주소 : %d 암호 : %d\n", &철수, 철수);
printf("영희네 주소 : %d 암호 : %d\n", &영희, 영희);
printf("민수네 주소 : %d 암호 : %d\n", &민수, 민수);
// 참고로 미션맨이 사는 곳의 주소는 ..&미션맨 으로 확인
printf("미션맨의 주소 : %d\n", &미션맨);
printf("스파이의 주소 : %d\n", &스파이);
return 0;
}
배열과 포인터의 관계
// 배열과 포인터의 관계
#include <stdio.h>
int main(void)
{
int arr[3] = { 5,10,15 };
int* ptr = arr;
for (int i = 0; i < 3; i++)
{
printf("배열 arr[%d] 의 값 : %d\n", i, arr[i]);
}
for (int i = 0; i < 3; i++)
{
printf("포인터 ptr[%d] 의 값 : %d\n", i, ptr[i]);
}
ptr[0] = 100;
ptr[1] = 200;
ptr[2] = 300;
printf("\n");
for (int i = 0; i < 3; i++)
{
//printf("배열 arr[%d] 의 값 : %d\n", i, arr[i]);
printf("배열 arr[%d] 의 값 : %d\n", i, *(arr+i));
}
for (int i = 0; i < 3; i++)
{
//printf("포인터 ptr[%d] 의 값 : %d\n", i, ptr[i]);
printf("포인터 ptr[%d] 의 값 : %d\n", i, *(ptr+i));
}
//결과가 같으므로 ptr과 arr이 같음을 알 수 있다.
printf("\n");
// *(arr + i) == arr[i] 같은 표현이다.
// arr == arr 배열의 첫번째 값의 주소와 동일 == &arr[0]
printf("arr 자체의 값 : %d\n", arr);
printf("arr[0] 의 주소 : %d\n", &arr[0]);
printf("\n");
printf("arr 자체의 값이 가지는 주소의 실제 값 : %d\n", *arr); // *(arr + 0) 과 같음
printf("arr[0] 의 실제 값 : %d\n", *&arr[0]);
printf("\n");
// *& 는 아무것도 없는 것과 같다. %은 주소이며, *은 그 주소의 값이기 때문에,
// *&는 서로 상쇄된다.
printf("arr[0] 의 실제 값 : %d\n", *&*&*&*&*&*&*&*&*&arr[0]);
printf("arr[0] 의 실제 값 : %d\n", arr[0]);
return 0;
}
728x90
반응형