'포인터'에 해당되는 글 2건

  1. 2009.03.24 다중 포인터
  2. 2009.03.19 포인터
C/C++2009. 3. 24. 20:47

/*
#include <stdio.h>   //2차원 배열

int main(void){

 int A[3][4] = {
  {1,2,3,4},
  {5,6,7,8},
  {9,10,11,12}

 };
 int i,j;

 printf("A[0][0] = %d \n",A[0][0]);
 printf("A[0][0] = %d \n",A[1][3]);

 printf("A = %d \n",A);
 printf("A[0] = %d \n",A[0]);
 printf("&A[0][0] = %d \n",&A[0][0]);
 printf("A[1] = %d \n",A[1]);
 printf("&A[1][0] = %d \n",&A[1][0]);

 for(i=0;i<3;i++){
  for(j=0;j<4;j++){
   printf("%3d ",A[i][j]);
  }
  printf("\n");

 }

 return 0;
}
*/

/*

#include <stdio.h>   //2차원배열을 이용 학생성적

int main(void){

 int A[3][4];
 int i,j;

 printf("<<학생 성적 입력>>\n");

 for(i=0;i<3;i++){
  printf("<< %d번째 학생>>\n",i+1); 
  printf(" 국어 : ");
  scanf("%d",&(A[i][0]));  //표를 생각해보면 됨
  printf(" 영어 : ");
  scanf("%d",&(A[i][1]));
  printf(" 수학 : ");
  scanf("%d",&(A[i][2]));
  A[i][3]=A[i][0]+A[i][1]+A[i][2];  //for이 세번 돌면서 합까지 열3번째 계산
 }
  
 
  printf("%s %5s %5s %5s %5s\n","Num","국어","영어","수학","합계");
  
  for(i=0;i<3;i++){
   printf("[%d]",i+1);
   for(j=0;j<4;j++){
    printf("%5d", A[i][j]);
   }
   printf("\n");
  }
  return 0;
}
*/

#include <stdio.h>

int main(){

 int x = 10;

 int * p;    //일중 포인터
 int ** pp;   //이중 포인터
 int *** ppp;   //삼중 포인터
 int y = 200;

 p = &x;

 *p = 100;

 printf("x = %d \n",x);   //x의값
 printf("&x = %d \n",&x); //x의 주소

 pp = &p;

 printf("pp = %d \n",pp);  //p의 주소
 printf("*pp = %d \n",*pp);  //2번따라가서 x의 주소
 printf("**pp = %d \n",**pp); //x의 값

 ppp = &p;
 printf("ppp = %d \n",ppp);
 printf("*ppp = %d \n",*ppp);
 printf("**ppp = %d \n",**ppp);
 //printf("***ppp = %d \n",***ppp);

 x = &y;

 printf("***ppp = %d \n",***ppp);

 return 0;
}

슬슬 한계다...

Posted by 샤키
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 샤키