본문 바로가기

C언어/정리
C 언어 도전기 6

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", &민수, 민수);

return 0;
}

2-1. 포인터 변수

int main(void)
{
int* 미션맨; // 포인터 변수
미션맨 = &철수;
printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);

미션맨 = &영희;
printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);

미션맨 = &민수;
printf("미션맨이 방문하는 곳 주소 : %d, 암호 : %d\n\n", 미션맨, *미션맨);

return 0;
}

2-2. 포인터 변수

int main(void)
{
미션맨 = &철수;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);

미션맨 = &영희;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);

미션맨 = &민수;
*미션맨 = *미션맨 * 3;
printf("미션맨이 암호를 바꾼 곳 주소 : %d, 암호 : %d\n", 미션맨, *미션맨);

return 0;
}

**포인터 변수 : 포인터 자체가 변수의 값을 직접 바꿀 수 있다.

3-1. 배열과 포인터의 관계

 

3-2.&nbsp;배열과 포인터의 관계

**  *&는 아무것도 없는 것과 같음. (&은 주소 , *는 그 주소의 값 -> 서로 상쇄됨)

4. swap

void swap(int a, int b);
void swap_addr(int *a, int *b);

int main(void)
{
int a = 10;
int b = 20;
printf("a의 주소 : %d\n", &a);
printf("b의 주소 : %d\n", &b);

//a와 b의 값을 바꾼다.
printf("Swap 함수 전 => a: %d, b : %d\n", a, b);
swap(a, b);
printf("Swap 함수 후 => a: %d, b : %d\n", a, b);

// 값에 의한 복사 (Call by Value) -> 값만 복사한다는 의미

// 주소값을 넘기면? 메모리 공간에 있는 주소값 자체를 넘기면...
printf("(주소값 전달)Swap 함수 전 => a: %d, b : %d\n", a, b);
swap_addr(&a, &b);
printf("(주소값 전달)Swap 함수 후 => a: %d, b : %d\n", a, b);

return 0;
}

void swap(int a, int b)
{
printf("Swap 함수 내 a의 주소 : %d\n", &a);
printf("Swap 함수 내 b의 주소 : %d\n", &b);

int temp = a;
a = b;
b = temp;
printf("Swap 함수 내 => a: %d, b : %d\n", a, b);
}

void swap_addr(int *a, int *b)
{
int temp = *a;
*a =* b;
*b = temp;
printf("(주소값 전달)Swap 함수 내 => a: %d, b : %d\n", *a, *b);
}

5. 포인터로 배열값 변경

void changeArray(int* ptr);

int main(void)
{
// 배열일 때, arr2 -> 주소
int arr2[3] = { 10, 20, 30 };
//changeArray(arr2);
changeArray(&arr2[0]);
for (int i = 0; i < 3; i++)
{
printf("%d\n", arr2[i]);
}

return 0;
}

void changeArray(int* ptr)
{
ptr[2] = 50;
}

'C언어 > 정리' 카테고리의 다른 글

C 언어 도전기 8  (0) 2022.07.05
C 언어 도전기 7  (0) 2022.07.04
C 언어 도전기 5  (0) 2022.07.03
C 언어 도전기 4  (0) 2022.07.02
C 언어 도전기 3  (0) 2022.06.28