포인터 변수는 메모리의 주소를 가지는 변수이다.
포인터 변수의 크기는 4byte의 부호없는 정수형이다
/*
포인터변수 = 포인터
변수 : 데이터를 담을수 있는 메모리
메모리주소를 담는 변수
☆포인터변수를 선언하면 ---> 부호없는 정수형 (4바이트)☆
*/
/*
#include <stdio.h>
int main(){
int x = 100;
int y = 200;
int * p;
printf("x = %d \n", x);
printf("x의 주소 : %d \n", &x); //10진수 %d, 16진수로 보려면 %x
printf("x의 16진수 : %x \n", &x);
printf("y = %d \n", y);
printf("y의 주소 : %d \n", &y); // &변수의 주소
printf("y의 16진수 : %x \n", &y);
p = 1245024; //&x 내 x의 메모리주소
printf("p = %d \n", p); //p는 메모리주소를 담고 있고
printf("*p = %d \n", *p); //*는 주소를 통해 해당변수로 접근
*p = 300;
printf("x = %d \n", x);
return 0;
}
*/
/*
int main(){
int Num = 0x12345678;
char * p;
p = &Num;
printf("Num = %x\n",Num);
printf("*p = %x \n",*p); //char로 1바이트를 사용 그래서 두자리수씩 읽는데
// 엔디안방식(?)으로 실질적으로는 78 56 34 12로 나와서 78로 출력
return 0;
}
*/
/*
int main(){
int A[7] = { 10, 23, 51, 2, 990, 3, 94 };
double * p; //double 이건 p는 부호없는 4바이트다
p = &A[1];
printf("%d",*(p+2));
return 0;
}
*/
/*
int main(){ //배열과 포인터
int A[8] = { 10, 23, 51, 2, 990, 3, 94, 0}; //A는 배열의 첫번째 주소(&A[0]과 같은뜻)
int * p;
printf("*A = %d \n",*A); //A는 포인터 상수 (값이 변경 불가능)☆중요
printf("*(A+1) = %d \n",*(A+1)); //10 다음수 23 출력
p = A;
printf("*p = %d \n",*p); //p는 포인터 변수 (값이 변경 가능)☆중요
printf("*(p+1) = %d \n",*(p+1));
//p++; //p가 포인터변수라서 가능 (반면, A++는 상수라 불가능)☆중요
//printf("*p = %d \n",*p);
for(p=A;*p != 0;p++){ //p는 A부터 p가 0이 아닐때까지 증가하면서 출력해라
printf("%d \n", *p);
}
return 0;
}
*/
/*
#include <stdio.h> //Call by Reference
void func(int *x, int *y){ //주소로 넘겨준다
printf("x(main Num1 주소) = %d \n",x);
printf("y(main Num1 주소) = %d \n",y);
*x = 300; //넘겨준 주소에서 값을 바꾸면
*y = 400;
}
int main(){
int Num1 = 100;
int Num2 = 200;
printf("Num1 = %d \n",Num1);
printf("Num1 = %d \n",Num2);
func(&Num1,&Num2);
printf("Num1 = %d \n",Num1); //함수요청후 값이 바뀌걸 알수있다
printf("Num1 = %d \n",Num2);
return 0;
}
*/
/*
#include <stdio.h> //두 값을 서로 교환하는 함수
void change(char *ch1, char *ch2){
char tmp;
tmp = *ch1;
*ch1 = *ch2;
*ch2 = tmp;
}
int main(){
char x='A', y='B';
printf("x = %c , y = % c\n",x,y);
change(&x,&y);
printf("x = %c , y = % c\n",x,y);
return 0;
}
*/
/*
#include <stdio.h>
int main(){
int array[10] = {6,9,3,2,161,4,888,19};
int *pt = array;
printf("*array : %d\n",*array); //6
printf("*array : %d\n",*array+4); //*array부터 계산
printf("*array : %d\n",*(array+2)); //3
printf("*(pt+1) : %d\n",*(pt+1)); //9
printf("*(2+pt)+1 : %d\n",*(2+pt)+1); //X
printf("2*(*(4+(++pt))+5) : %d\n",2*(*(4+(++pt))+5));
printf("*5[array] : %d\n",5[array]);
printf("*array[5] : %d\n",array[5]);
printf("*0[array+5] : %d\n",0[array+5]);
printf("*(3+1)[array+1]+10 : %d\n",(3+1)[array+1]+10);
printf("*1+2[array+3]+5 : %d\n",1+2[array+3]+5);
return 0;
}
*/
#include <stdio.h>
int change(int *a,int *b,int c){
int temp = *a; //*a의 10을 백업
*a = c; //c의30을 *a에 복사
c = *b; //*b의 20을 c에 복사
*b = temp; //백업해둔 temp를 불러와 *b에 복사해서 *b는 10
return c; //c말고도 a,b로도 바꾸어본다
}
int main(){
int a=10,b=20,c=30;
c = change(&a,&b,c);
printf("a : %d\n",a);
printf("b : %d\n",b);
printf("c : %d\n",c);
return 0;
}
C의 꽃이라고 하는 포인터다 아직은 들을만 하다...
놓치지 말고 열심히 해야지...
언제 포기 할지 모르지만...