Point 란 번지. 포인터변수란 포인터를 저장할수 있는 변수 = 메모리의 특정위치를 저장

int *imsip; 의 정의는 imsip에 번지를 저장할수 있다는 뜻.

&연산자가 특정변수의 선두번지를 뜻한다면, *연산자는 그반대.
포인터변수에 저장된 선두번지를 참조하여 하나의값을 취함.


*imsip =1000;     //imsip가 가르키는곳에 1000을 대입.
  └→ imsip가 가르키는곳이 정확히 명시되어야함.

-Point는 형구별없이 무조건 4byte!

void main()
{
   p= &ST;
   printf("학번입력");
   scanf("%d"&p->id);

   printf("이름입력");
   scanf("%s",&p->name);
 
  printft("국,영,수 입력");
  scanf("%d %d %d",&p->kor,&p->eng,&p->math);

  printft("집주소");
  scanf("%s",&p->address);

  printf("학번: %d", p->id);
  printf("이름:%s", p->name);
  printf("국,영,수 성적: %d %d %d",p->kor, p->eng, p->math);
  printf("집주소:%s",p->address);


※scanf("%s",p->name); → 띄어쓰기로 공백입력시 null값으로 인식, 띄어쓰기 전까지만 기억함
    gets(p->name); → 한번만입력했는데 enter키가 자동으로 들어감 gets() 전에 scanf로
                                입력받을때 enter키가 버퍼에 남아있어서 gets()가 받아서 name에 넣어버림
    getch(p->name); → enter값을 받아서 저장도안하고 사라짐

⊙해결방법: 버퍼 초기화 fflush(stdin);
                     
-   fflush(stdin);
    gets(p->name);

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

typedef  (0) 2011.08.17
구조체와 배열  (0) 2011.08.17
구조체  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17
다중포인터란?  포인터 변수의 주소를 담고 있는 포인터
 *(참조연산자)만큼 참조 연산이 일어나면서 접근함

 int **pp    : 이중포인터
 int ***ppp : 삼중포인터


#include<stdio.h>
void main()
{
   char arr[4][10] = {"Dog","Cat","Monkey",Mouse"};
   char (*p)[10];
   int i=0;
   p=arr;

   for(i=0;  i<4;  i++)
   {
      printf("배열 포인터 p+ %d = %s 주소: %d \n",i,p+i,p+i);
    }
   printf("\n");

   for(i=0;  i<4;  i++)
   {
       printf("이차원배열 arr + %d \ %s 주소: %d \n",i,arr+i,arr+i);
    }

 }



'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

Call by Address  (0) 2011.08.17
Call By Value  (0) 2011.08.17
다차원 배열(이차원배열)  (0) 2011.08.16
배열 and 포인터  (0) 2011.08.16
포인터  (0) 2011.08.16

#include<stdio.h>
void main()
{
   int arr[5]={1,2,3,4,5}'
   int i=0;
   for(i=0; i<5; i++)                                 for(i=0; i<5, i++)
   {                                 동일코드       {
      printf("%d",arr[i]);          〓                printf("%d",*(arr+i));
   }                                                     }
   printf("\n");
}


※배열이름은 배열의 첫번째 주소를 가지고있다.(포인터상수)


'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

다중포인터  (0) 2011.08.17
다차원 배열(이차원배열)  (0) 2011.08.16
포인터  (0) 2011.08.16
변수의 공간할당  (0) 2011.08.16
배열(문자)  (0) 2011.08.16
포인터란?   주소 그자체
 ①포인터는 메모리의 번지 주소.
 ②포인터 변수  메모리의 주소를 가지는 변수.
 ③포인터 변수의 크기는 4Byte 의 부호없는 정수형

◎포인터연산자
 ① &(주소연산자)는 변수의 메모리 주소를 표현해주는 연산자.
 ② *(참조자)      는 주소를 이용하여 변수값을 접근하는 연산자.
#include <stdio.h>
void main()
{
   int number =100;
   int *p;
   p= &number; 
   printf("p =%d \n",p);
   printf("*p = %d \n",*p);
}


《p= &number》
→p는 포인터 변수로 number의 주소값을 가지고 있다.
   p라는 포인터 변수가 가지는 값을 주소로 보고, 그값(number의 주소)을 참조해서 해당주소의
   실제값을 출력.







printf에서 *p라는 참조연산자를 실행한값은 p라는 퐁인터변수가 가지는 값을 주소로 보고 그값(주소)을
참조하여 한번더 들어간다는 뜻.

즉,  number값은 100                         p값은  0000 이라는 number의 주소값
    &number값은  0000(주소)            &p값은  0004 라는 포인터 변수의 p값
                                                    *p값은  0000 이라는 p값의 데이터를 참조해서 찾아간 number의 값


 

#include <stdio.h>
void main()
{
   char *p = "string";
   while (*p)
   {
      printf("%c,%d \n",*p,p);
      p++;
    }
}


p[]로 사용하던것을 *p로 선언!
while문에서 *p의 마지막인 Null값을 만나면 종료.
포인트 변수에 +1



*scanf로 받을시

#include<stdio.h>                                       #include<stdio.h>
void main()                                                void main()
{                                  (수정code)            {
   char *p;                             →                      char *p,arr[10];
   scanf("%s",p);                                             scanf("%s",arr);
   printf("%s",p);                                               p=arr;
}                                                                   printf("%s",p);
                                                                 }

                                                               《p=arr;》→배열의 이름(첫번째주소값)을 p에대입.   

    

 

'C > 난정말C Programming을 공부한적이없다고요' 카테고리의 다른 글

다차원 배열(이차원배열)  (0) 2011.08.16
배열 and 포인터  (0) 2011.08.16
변수의 공간할당  (0) 2011.08.16
배열(문자)  (0) 2011.08.16
배열(숫자)  (0) 2011.08.16