int a, b; //a와 b둘다 int형 정수다
int* a, b; //a는 포인터이고, b는 int형정수다
int* a, *b; //a와 b 둘다 포인터이다
//포인터 변수는 직접적을 주소를 대임하면 안된다
/*
초기화는 가능
방법:
1. int * p = 0;
2. int * p = NULL;
*/
포인터 변수
#include<stdio.h>
int main(void) {
int a = 100;
int* p;
p = &a;
printf("a는 %d, a주소는 %d p는 %d *p는 %d \n", a, &a, p, *p);
int b = 200;
p = &b;
printf("b는 %d, b주소는 %d p는 %d *p는 %d\n", b, &b, p, *p);
return 0;
}
포인터 변수 char
#include<stdio.h>
int main(void) {
/*ch 6 포인터 */
char ch; //변수 ch선언
char* p; //포인터 변수 선언
ch = 'A'; //ch는 'A'라고 넣음
p = &ch; //포인터변수 p에 ch주소값 넣음
printf("ch가 가지고 있는 값은 : ch == > %c \n", ch); //A
printf("ch의 메모리 주소는 &ch == > %d \n", &ch); //메모리 주소 나옴
printf("포인터 변수 p가 가지고 있는 값은 : p ==> %d \n", p); // &ch(ch 메모리 주소) 값과 같음
printf("p가 가리키는 곳의 실제 값은 : *p %c \n", *p); //*p에 들어간 실제 값
return 0;
}
포인터 값 변경
#include<stdio.h>
int main(void) {
/*ch 7 포인터 */
char ch;
char* p;
char* q;
ch = 'A';
p = &ch; //ch의 주소를 p에 대입
q = p; //q에 &ch를 대입
printf("&ch(주소) 값 : &ch ==> %d \n", &ch); //주소값
printf("p 값 : p ==> %d \n", p); // &ch값과 동일
printf("q 값 : q ==> %d \n", q); // &ch값과 동일 = p값과 동일
printf("*q 값 : *q ==> %c \n", *q); // ch의 ;A;를 담았으니 'A'가출력
*q = 'Z'; //*q에 'Z'를 넣음으로써 ch값이 'Z'로 바뀜
printf("ch가 가지고 있는 값 : ch ==> %c \n", ch); //'A' 에서 'Z'로 변경됨
return 0;
}
포인터 변수는 무조건 4byte이다 (x86)
#include<stdio.h>
int main(void) {
//(x86) 일때
int* pi;
double* pd;
char* pc;
float* pf;
printf("sizeof(pi) = %d \n", sizeof(pi));
printf("sizeof(pd) = %d \n", sizeof(pd));
printf("sizeof(pc) = %d \n", sizeof(pc));
printf("sizeof(pf) = %d \n", sizeof(pf));
printf("sizeof(int* ) = %d \n", sizeof(int*));
printf("sizeof(double* ) = %d \n", sizeof(double*));
printf("sizeof(char* ) = %d \n", sizeof(char*));
printf("sizeof(float* ) = %d \n", sizeof(float*));
return 0;
}
포인터 변수는 무조건 4byte이다?? → but (x64) 일때는 8byte나옴
#include<stdio.h>
int main(void) {
//(x64) 일때
int* pi;
double* pd;
char* pc;
float* pf;
printf("sizeof(pi) = %d \n", sizeof(pi));
printf("sizeof(pd) = %d \n", sizeof(pd));
printf("sizeof(pc) = %d \n", sizeof(pc));
printf("sizeof(pf) = %d \n", sizeof(pf));
printf("sizeof(int* ) = %d \n", sizeof(int*));
printf("sizeof(double* ) = %d \n", sizeof(double*));
printf("sizeof(char* ) = %d \n", sizeof(char*));
printf("sizeof(float* ) = %d \n", sizeof(float*));
return 0;
}
포인터 변수는 무조건 4byte이다?? → but (x64) 일때는 8byte나옴
→값이 잘 안나오면 %zd를 붙여라
#include<stdio.h>
int main(void) {
//(x64) 일때
int* pi;
double* pd;
char* pc;
float* pf;
printf("sizeof(pi) = %zd \n", sizeof(pi));
printf("sizeof(pd) = %zd \n", sizeof(pd));
printf("sizeof(pc) = %zd \n", sizeof(pc));
printf("sizeof(pf) = %zd \n", sizeof(pf));
printf("sizeof(int* ) = %zd \n", sizeof(int*));
printf("sizeof(double* ) = %zd \n", sizeof(double*));
printf("sizeof(char* ) = %zd \n", sizeof(char*));
printf("sizeof(float* ) = %zd \n", sizeof(float*));
return 0;
}
'언어 > C언어' 카테고리의 다른 글
[C언어] 5일차 통합본 / 220328 (0) | 2025.03.03 |
---|---|
[C언어] 메모리 주소값 출력 (0) | 2025.03.03 |
[C언어] 메모리주소 (0) | 2025.03.03 |
[C언어] 배열(array) / 문자열 받기 gets() /문자열 출력 puts() (0) | 2025.03.03 |
[C언어] 배열(array) / 문자열 길이값 strlen() / 문자열 복사 함수 strcpy() /문자열 연결 함수 strcat()/ 문자열 비교 함수 strcmp() (0) | 2025.03.03 |