언어/C언어

[C언어] 포인터

antoroong 2025. 3. 3. 22:45
	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;
}