반응형
- _21_교재
- 수업021_포인터.cpp
- 변수의 3요소
- 이름
- 값
- 주소
- 메모리. 1바이트에 대한 고유번호
- 다른 언어는 안 되는데. c언어는 주소를 출력해서 볼 수 있다.
- 고유넘버를 볼려면 &를 붙이면 된다.
- 변수의 3요소
#include <stdio.h>
int main(void) {
int a = 10;
printf("%d \n", a); //값
//printf("%d \n", &a); // 10진수로 표현 //고유번호
//d은 에러남. d 는 10진수
printf("%p \n", &a); // 16진수로 표현
//고유번호 0x......
//0x => 16진수라는 뜻
return 0;
//문제
//int는 4바이트
//그러면 1번의 주소만 나온다. 나머지 3개는 무시
}
- 수업021_포인터02.cpp
- 주소를 왜 저장하는가?
- ex) 엄청난 큰 배열이 있다.
- 코딩을 하다보면. 함수에서 함수로 자료를 넘겨준다. 그래야 코딩이 원활해진다.
- main에다가 다 작성할 수가 없다.
- 필현적으로 자료를 넘겨야 하는데.
- 자료를 넘길때마다 자료를 다 복사하는게. 쓸데 없는 짓인거다.
- 그러면 엄청난 배열이 있으면. 그 메모리의 주소만 넘기는 거다.
- 주소를 알고 있기 때문에. 배열을 접근할 수 있는거다.
- 주소를 왜 저장하는가?
#include <stdio.h>
int main(void) {
// 포인터변수 (일반변수의 주소를 저장할수있다.)
int* p = 0; //포인터 변수. 값을 저장하는게 아니라. 주소를 저장
int n = 10;
//p = 10; //이게 안된다.
p = &n; //이렇게 저장해야 한다.
//주소는 왜 저장하는가?
/*
포인터변수의 기능
*p ==> 저장된주소가있으면 주소로이동해 값을 출력한다.
*/
printf("%d %d\n", *p , n); // 값출력
//주소를 접근할 떄는 *p 이다.
printf("%d %d\n", p, &n); // 주소출력
return 0;
}
- 수업021_포인터03.cpp

#include <stdio.h>
int main(void) {
int* p = 0; //주소를 저장하는 변수
int n = 10;
p = &n; //주소를 준것
n += 1; //n = 11
printf("%d \n", *p);
//*p => p로 가서 그 값을 출력해라. //11
*p += 1;
//p로 가서 그 값에 +1해라.
//n = 12
printf("%d \n", n); //12
printf("%d \n", (*p)++);
//화면 12, n = 13
printf("%d \n", n); // 13
return 0;
}
- 수업021_포인터04.cpp

#include <stdio.h>
int main(void) {
int* p = 0;
int n = 10;
p = &n;
printf("%p\n", &n); //x
printf("%p\n", p); //x
printf("%p\n", *&p); //x
//p의 주소의 값을 출력
printf("%p\n", &p); //y
return 0;
}
- 수업021_포인터05.cpp
#include <stdio.h>
int main(void) {
char c; // 1
int n; // 4
double d; // 8
printf("%ld %ld %ld \n\n\n", sizeof(c), sizeof(n), sizeof(d));
//포인터 변수는 사이즈가 전부 8이다.
//자료형과 상관 없다.
char* cpt;
int* npt;
double* dpt;
printf("%ld %ld %ld \n\n\n", sizeof(cpt), sizeof(npt), sizeof(dpt));
return 0;
}
- _21_문제
- 문제021_포인터.cpp

#include <stdio.h>
int main(void) {
int A = 10, B; //A = 10, B
int* C = &B; //C =
B = A--;
B += 20;
printf("%d", *C); //30
return 0;
}
- 문제021_포인터02.cpp

#include <stdio.h>
int main(void) {
int code = 65;
int* p = &code;
// c로 출력 -65하면 된다 ABC.....abc.....
printf("%c", (*p)++);
//C로 출력은 65 => 대문자 A이다.
return 0;
}
- 문제021_포인터03.cpp

#include <stdio.h>
int main(void) {
int n = 4;
int* pt = NULL;
//NULL은 C언어로 0이다.
pt = &n;
printf("%d", &n + *pt - *&pt + n);
return 0;
}
- 문제021_포인터04.cpp
#include <stdio.h>
int main(void) {
// scanf_s 에 90이 입렸됬다고 가정하면 90 20 90이 출력된다.
int i = 10;
int j = 20;
int* k = &i;
scanf("%d", k);
printf("%d %d %d\n", i, j, *k);
return 0;
}반응형
'코딩 > C언어' 카테고리의 다른 글
| 포인터 와 배열 (1~4) (0) | 2025.07.09 |
|---|---|
| 수업022_포인터와문자열 ~ 수업022_포인터와문자열03, 문제022_포인터와문자열 ~ 문제022_포인터와문자열03 (1~5) (1) | 2025.07.04 |
| 수업014_함수 ~ 수업015_함수와배열02 , 문제014_함수 ~ 문제015_함수와배열(1~3) (1) | 2025.07.03 |
| _11_교재 => 수업012_배열 ~ 수업012_배열03 , _11_문제 => 문제012_배열 ~ 문제012_배열08 (1~3) (1) | 2025.07.01 |
| c언어 해설 (0) | 2025.07.01 |