반응형
*C언어 포인터
// 문제 : 포인터 변수 p를 이용해서 변수 2개의 값을 변경해주세요.
// 조건 : 변수 a, b에 값을 직접 할당하지 마세요.
#include <stdio.h>
int main(void) {
int a = 10;
int b = 20;
int* p;
p = &a;
*p = 100;
p = &b;
*p = 200;
printf("a : %d\n", a);
// 출력 => a : 100
printf("b : %d\n", b);
// 출력 => b : 200
return 0;
}
// 문제 : C언어에 있는 모든 기본포인터타입변수의 크기를 출력해주세요.
#include <stdio.h>
int main(void) {
// 정수 계열
char* c;
short* s;
int* i;
long* l;
// 실수 계열
float* f;
double* d;
printf("== 정답 ==\n");
printf("size of c : %lu\n", sizeof(c));
printf("size of char* : %lu\n", sizeof(char*));
printf("size of s : %lu\n", sizeof(s));
printf("size of short* : %lu\n", sizeof(short*));
printf("size of i : %lu\n", sizeof(i));
printf("size of int* : %lu\n", sizeof(int*));
printf("size of l : %lu\n", sizeof(l));
printf("size of long* : %lu\n", sizeof(long*));
printf("size of f : %lu\n", sizeof(f));
printf("size of float* : %lu\n", sizeof(float*));
printf("size of d : %lu\n", sizeof(d));
printf("size of double* : %lu\n", sizeof(double*));
return 0;
}
// 문제 : char 변수 b를 이용하지 않고 b의 값을 훼손
// 조건 : 포인터 변수를 사용해서 값을 변경해야 한다.
// 조건 : 수정가능 지역에서 b 라는 변수를 언급하면(사용하면) 안됩니다.
#include <stdio.h>
int main(void) {
char a = 1;
char b = 5;
printf("== 변수의 주소 ==\n");
printf("&a : %ld\n", (long)&a);
printf("&b : %ld\n", (long)&b);
char* p;
p = &a;
*p = 2;
p = &a - 1;
*p = 100;
printf("== 변수의 값 ==\n");
printf("a : %d\n", a);
// 출력 => a : 2
printf("b : %d\n", b);
// 출력 => b : 10
return 0;
}
// 문제 : int 변수 b를 이용하지 않고 b의 값을 훼손
// 조건 : 포인터 변수를 사용해서 값을 변경해야 한다.
// 조건 : 수정가능 지역에서 b 라는 변수를 언급하면(사용하면) 안됩니다.
#include <stdio.h>
int main(void) {
int a = 1;
int b = 5;
printf("== 변수의 주소 ==\n");
printf("&a : %ld\n", (long)&a);
printf("&b : %ld\n", (long)&b);
int* p;
p = &a;
*p = 2;
p = &a - 1;
*p = 10;
printf("== 변수의 값 ==\n");
printf("a : %d\n", a);
// 출력 => a : 2
printf("b : %d\n", b);
// 출력 => b : 10
return 0;
}
// 문제 : 변수의 주소를 올바른 포인터 변수에 저장하지 않은 예 구현
#include "stdio.h"
// int 변수를 가리키려면 int 전용 포인터 변수를 써야하는 이유
int main(void) {
int i = 1000;
char* cp = &i; // cp 에는 i 의 주소값이 저장된다.
printf("%d\n", i);
printf("%d\n", *cp); // 1000 이 아는 -24가 출력된다.
// 오류가 나는 이유 : 물론 cp 는 i의 주소값을 가지고 있다. 하지만 cp는 i변수에 접근하고 나서 4바이트를 가져오지 않고 1 바이트만 가져온다.
// 누군가를 가리키려면 주소값으로는 부족하다. 올바른 사이즈도 필요하다.
return 0;
}
// 문제 : 원본값을 훼손하는 change 함수를 만들어주세요.
#include <stdio.h>
void change(int* num) {
*num = 50;
}
int main(void) {
int x = 20;
printf("change 함수 호출하기 전의 x : %d\n", x);
int* p;
p = &x;
change(p);
printf("change 함수 호출한 후의 x : %d\n", x);
// 출력 => change 함수 호출한 후의 x : 50
return 0;
}
반응형
'프로그래밍 > C언어' 카테고리의 다른 글
C언어 포인터(심화) (0) | 2020.05.26 |
---|---|
C언어 변수타입, C언어 변수타입 크기확인 (0) | 2020.05.23 |
컴퓨터 구성, 메모리, C언어 포인터 (0) | 2020.05.23 |
C언어 함수(심화), 별찍기 (0) | 2020.05.22 |
C언어 함수 (0) | 2020.05.20 |