C/C++2009. 3. 19. 23:41
포인터란 메모리의 번지 주소이다.
포인터 변수는 메모리의 주소를 가지는 변수이다.
포인터 변수의 크기는 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의 꽃이라고 하는 포인터다 아직은 들을만 하다... 
놓치지 말고 열심히 해야지...
언제 포기 할지 모르지만...

Posted by 샤키