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

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

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


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

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


#include<stdio.h>
void main()
{
   typedef int_var;
   int a=100;
   int_var b=200;
   printf("%d %d \n",a,b);
}


*typedef 실행시 그다음부터는 int형 자료형을 사용할때 int_var이라는 병명을 사용해서 선언가능.

◎구조체에 적용

typedef struct student {
   int id;
   char name[20];
   int kor,eng,math;
   char address[100];
}People;
void main()
{
   People ST, *p;
   p= &ST;
       .
       .
       .
}


People → 별명으로 선언

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

구조체와 포인터  (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

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

#include<stdio.h>
struct student{
   int id;
   char name[20];
   int eng,kor,math;
   char address[100];
};

void main()
{
   struct student ST[2]= {{201154321,"hong gil dong",90,91,92."서울 강남구 대치동"},
                                  {201112345,"kang gil dong",98,80,86,"서울 종로구 혜화동"}};

for(int i=0; i<2; i++)
{
   printf("ST구조체의 크기: %d \n",sizeof(ST));
   printf("ST학번: %d" ,ST[i].id);
   printf("ST이름: %s" ,ST[i].name);
                   .
                   .
                   .
}



*scnaf("%d",&ST.id) ← 로값을 입력받을수 있음.
  ST.id= 12345 형식으로 값직접대입가능.

구조체의 크기는 136
 136byte 가 2개선언 →ST[0] , ST[1]

'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
구조체란?

사용자가 직접 자료형을 만들어서 사용하는것!

사용법                                       ex)
struct 구조체{                                            struct my_spec{
   자료형 변수 ;                                              int tall;
};                                                                 int  age;
                                                                   char name[20];
                                                                 };

위의 ex) 와같이 선언후
struct my_spec A;     → int 형 2개 char 형 한개를 묶어서 my_spec라는 자료형 A를 만듦.
A.tall = Value;



#include<stdio.h>
struct student{
   int id;
   char name[20];
   int kor,eng,math;
   char address[100];
};

void main()
{
   struct student ST= {201154321, "hong gil dong", 90,91,92,"서울 강남구 대치동"
};
   printf("ST구조체의 크기 : %d \n" sizeof(ST));
   printf("ST의 학번 : %d \n",ST.id);
   printf("ST의 이름: %s \n",ST.name);
   printf("ST의 성적(국,영,수):%d %d %d \n",ST.kor,ST.engm,ST.math);
   printft("ST의 주소:%s \n",ST.address);
}



*구조체를 정의하고 main에서 구조체 자료형(student)을 ST라는 변수로 선언.
  초기화는 구조체 타입에 정의한순서대로 (int, char,int,int,int,char)
printf문에서 ST.id  → 구조체의 접근은 .(마침표)로 접근


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

구조체와 포인터  (0) 2011.08.17
구조체와 배열  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call by Address  (0) 2011.08.17
Call By Value  (0) 2011.08.17

Call by Referance란? 전달인자에 별명을 붙여줌.

ex)  void main()
{
   int name=10;
   int &nick= name;
}

※swap함수를 부를때 별명으로 &imsi_x, &imsi_y를 만듦.


#include<stdio.h>
void swap(int &imsi_x, &imsi_y);

void main()
{
   int x=10, y=20;
   printf("함수 호출전 x=%d y=%d",x,y);
   swap(x,y);
   printf("함수호출후 x=%d y=%d",x,y);
}

void swap(int &imsi_x, int &imsi_y)
{
   int temp=0;
   temp = imsi_x;
   imsi_x = imsi_y;
   imsi_y = temp;
   printf("함수안의 imsi_x = %d imsi_y = %d",imsi_x,imsi_y);
}

첫번째 main x=10, y=20
두번째 swap x=20, y=10
세번째 main x=20, y=10

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

구조체와 배열  (0) 2011.08.17
구조체  (0) 2011.08.17
Call by Address  (0) 2011.08.17
Call By Value  (0) 2011.08.17
다중포인터  (0) 2011.08.17

Call by Address란? 주소를 넘겨주는 방식


#include<stdio.h>
void swap(int *imsi_x, int *imsi_y);
int main()
{
   int x=10, y=20;
   printf("함수호출전 x= %d y=%d",x,y);
   swap(&x,&y);
   printf("함수호출후  x=%d y=%d",x,y);
}

void swap(int *imsi_x, int imsi_y)
{
   int temp=0;
   temp= *imsi_x;
   *imsi_x = *imsi_y;
   *imsi_y = temp;
   printf("swap 함수안 imsi_x=%d , imsi_y=%d",imsi_x,imsi_y);
}


첫번째 main  x=10, y=20
두번째 swap x=20, y=10
세번째 main x=20, y=10


*주소를 직접참조하여 값이 변경가능

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

구조체  (0) 2011.08.17
Call by Referance  (0) 2011.08.17
Call By Value  (0) 2011.08.17
다중포인터  (0) 2011.08.17
다차원 배열(이차원배열)  (0) 2011.08.16

Call By Value 란? 함수에 값을 넘겨줌(복사값을 전달함으로 원본값이 변하지않음)
                              단점: 값을 넘겨줄때마다 고비용. 복사손실 단점


#include<stdio.h>
void swap(int imsi_x, int imsi_y);
void main()
{
   int x=10, y=20;
   printf("함수호출전 x= %d, y=%d", x,y);

   swap(x,y);

   printf("함수호출후 x=%d, y=%d, x,y);
}

void swap(int imsi_x, int imsi_y)
{
   int  temp =0;
   temp = imsi_x;
   imsi_x = imsi_y;
   imsi_y= temp;
  
   printf("swap 함수안의  imsi_x = %d, imsi_y= %d", imsi_x,imsi_y);
}


첫번째 main 함수출력값:   10,20
두번째 swap 함수출력값:   20,10
세번째 main 함수출력값:   10,20

*swap 함수가 실행될때 main함수에선 10과 20이라는 값이 복사되어 넘어감
 swap함수가 끝나고 main함수로 돌아왔을때 값이 바뀌지 않음.


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

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

 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 i=0, j=0;
   int num[3][3] = {1,2,3,4,5,6,7,8,9};
   for(i=0; i<3; i++)
   {
      for(j=0; j<3; j++)
         {
             printf("num[%d][%d]=%d", i,j,num[i][j]);
          }
       printf(""\n");
    }
   }



*num 이라는 배열은 3개의 12바이트 공간을 한개의 요소로 갖는 일차원 배열.
 num[0]을 배열이름이라고 생각하고, 변수 3개를 갖는다고 생각하면됨.
 
● num   = &num[0] = &num[0][0] = 0000
    num1 =  &num[1] = &num[1][0] = 0012
 

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

Call By Value  (0) 2011.08.17
다중포인터  (0) 2011.08.17
배열 and 포인터  (0) 2011.08.16
포인터  (0) 2011.08.16
변수의 공간할당  (0) 2011.08.16