연결 리스트

 #include <stdio.h>


struct smart
{
  int iNum;
  struct smart * self;
};

int main()
{
  struct smart A = {10};  
  struct smart B = {20};
  struct smart C = {30};
  struct smart D = {40};
  struct smart * p;
  
  A.self = &B;                     
  B.self = &C;
  C.self = &D;
  
  p = &A;

  while(0 != p)
  {
    printf("%d->", p->iNum); 
    p = p->self;
  
  }
  printf("NULL \n");
  return 0;
}




 #include <stdio.h>


struct bigdata
{
  int iNum;
  char data[1000];
  struct bigdata * next;    
};

int main()
{
  struct bigdata test[4];
  struct bigdata temp;
  struct bigdata * p;
  int iCnt;

  test[0].iNum = 0;
  test[1].iNum = 1;
  test[2].iNum = 2;
  test[3].iNum = 3;

  test[0].next = &test[1];
  test[1].next = &test[2];
  test[2].next = &test[3];
  test[3].next = 0;



  for(iCnt=04>iCnt; iCnt++)
  {
    printf("%d->", test[iCnt].iNum);
  }

//  temp.iNum = test[0].iNum;
//        test[0].iNum = test[1].iNum;
//        test[1].iNum = temp.iNum;

  printf("\n");
  for(iCnt=04>iCnt; iCnt++)
  {
    printf("%d->", test[iCnt].iNum);
  }

  printf("\n");
  
  for(p=test; p!=0; p=p->next)
  {
    printf("%d->", p->iNum);
  }
  
  printf("\n");

  = &test[1];      //
  test[0].next = &test[2];
  p->next = test[2].next;
  test[2].next = p;

  for(p=test; p!=0; p=p->next)
  {
    
    printf("%d->", p->iNum);
  }

  return 0;  
}

위의 노란펜부분의 메모리 구조





변수선언으러 보는 메모리 다섯가지 구조

 #include <stdio.h>


  int A;
  int B;
  int C;    //비에스에스영역
  int D = 100;  
  int E = 200;  
  int F = 300;  //데이타영역

int main()
{
  int G;  //스택영역
  int H;  
  int I;  
  
  int * p;
  p = malloc(4);  //힙영역
      //말록은 주소값을 반환
  free(p);
  
  printf("Code (%08X)\n"&main); //코드영역
  printf("Bss  (%08X)\n"&A); 
  printf("Data (%08X)\n"&D); 
  printf("Stack(%08X)\n"&G); 
  printf("Heap (%08X)\n", p);  

  return 0;
}



'C언어' 카테고리의 다른 글

20140416 소스인사이트 프로젝트생성하는법  (0) 2014.04.16
20140415 연결리스트  (0) 2014.04.15
20140411 구조체  (0) 2014.04.11
20140410 구조체 변수와 포인터  (0) 2014.04.10
20140409 구조체 효율높이기  (0) 2014.04.09
by 날라차숑 2014. 4. 14. 10:40


 #include <stdio.h>


typedef struct point
{
  int xpos;
  int ypos;
} Point;


int main()
{
  Point pos1={12};

  Point pos2;
  pos2 = pos1;                           //구조체의 대입연산이 되는가?

  printf("크기: %d \n"sizeof(pos1));  //구조체의 sizeof연산이 되는가?
  printf("%d %d \n"pos1.xpos, pos1.ypos);


  printf("크기: %d \n"sizeof(pos2));  //구조체에 대입연산이 되었는가?
  printf("%d %d \n"pos2.xpos, pos2.ypos);



  return 0;
}


 #include <stdio.h>


typedef struct point
{
  int xpos;
  int ypos;
} Point;    //Point구조체 선언

Point AddPoint(Point pos1, Point pos2)  //구조체 덧셈을 가능하게하는 함수
{
  Point pos={pos1.xpos+pos2.xpos, pos1.ypos+pos2.ypos};
  return pos;
}
Point MinPoint(Point pos1, Point pos2)  //구조체 뺄셈을 가능하게하는 함수
{
  Point pos={pos1.xpos-pos2.xpos, pos1.ypos-pos2.ypos};
  return pos;

}

int main()
{
  Point pos1={56};  
  Point pos2={29};
  Point result;

  result=AddPoint(pos1, pos2);
  printf("[%d, %d] \n", result.xpos, result.ypos);
  result=MinPoint(pos1, pos2);
  printf("[%d, %d] \n", result.xpos, result.ypos);
  return 0;
}


 #include <stdio.h>


typedef struct _Point
{
  int xpos;
  int ypos;
} point;

typedef struct _Circle
{
  point cen;  //구조체의 변수를 선언
  double rad;
} circle;

void ShowCircleInfo(circle * cptr)
{
  printf("[%d, %d] \n"(cptr->cen).xpos, (cptr->cen).ypos);

  printf("raduis: %g \n\n", cptr->rad);
}



int main()
{
  circle c1={{1,2}, 3.5}; 중괄호를 써서 초기화할수있다.

  circle c2={24 ,3.9};  차례대로도 할수있다.

  ShowCircleInfo(&c1);
  ShowCircleInfo(&c2);
  

  return 0;
}



 #include <stdio.h>


union smart
{
  int A;
  short B;
  char C;
};

int main()
{
  union smart test;
  test.A = 0x12345678;   

  printf("%X \n", test.A);  메모리에 들어가는 순서 78/56/34/12
  printf("%X \n", test.B);
  printf("%X \n", test.C);

  test.B = 0xAAAA;
  test.C = 0xFF;

  printf("%X \n", test.A);
  printf("%X \n", test.B);
  printf("%X \n", test.C);

  return 0;
}




'C언어' 카테고리의 다른 글

20140415 연결리스트  (0) 2014.04.15
20140414 atmega구조  (0) 2014.04.14
20140410 구조체 변수와 포인터  (0) 2014.04.10
20140409 구조체 효율높이기  (0) 2014.04.09
20140408 구조체  (0) 2014.04.08
by 날라차숑 2014. 4. 11. 16:49


 #include <stdio.h>


struct smart
{
  int A;
  short B;
  float C;
  char D;
  int E;
  
};

int main()
{
  struct smart test = {100,50,4.1,10,1};    //만들자마자 초기화 하는 방법
  void * vp = &test;  //배열과 다르게 취급하니 주소표시(&)붙이자
  printf("A=%d \n", test.A); 
  printf("A=%d \n", *((int *)vp));     //vp 보이드 라서 캐스팅함.
  vp = (char *)vp+4;
  printf("B=%d \n", *((short *)vp)); 
  vp = (char *)vp+4;
  printf("C=%f \n", *((float *)vp)); 
  vp = (char *)vp+4;  
  printf("D=%d \n", *((char *)vp)); 
  vp = (char *)vp+4;  
  printf("E=%d \n", *((char *)vp)); 
  return 0;
}

변수 메모리 배치

A(int)

 B(short)

 

 

 C(Float)

 D(char)

 

 

 

 E(int)




 #include <stdio.h>


struct smart
{
  int A;
  short B;
  float C;
  char D;
  int E;
  
};

int main()
{
  struct smart test = {100,50,4.1,10,1};    
  struct smart *  stP = &test;

  printf("A=%d \n", stP->A);       
  printf("B=%d \n", stP->B); 
  printf("C=%f \n", stP->C); 
  printf("D=%d \n", stP->D); 
  printf("E=%d \n", stP->E); 

  printf("\n");

  printf("A=%d \n", test.A);       
  printf("B=%d \n", test.B); 
  printf("C=%f \n", (*stP).C); 
  printf("D=%d \n", (*stP).D); 
  printf("E=%d \n", (*stP).E); 

 결과  printf("A=%d \n", stP->A);  
       printf("A
=%d \n", test.A);

       printf("C=%f \n", (*stP).C);

                모두 같음.             

 
  return 0;
}



'C언어' 카테고리의 다른 글

20140414 atmega구조  (0) 2014.04.14
20140411 구조체  (0) 2014.04.11
20140409 구조체 효율높이기  (0) 2014.04.09
20140408 구조체  (0) 2014.04.08
20140307 입출력함수  (0) 2014.04.07
by 날라차숑 2014. 4. 10. 14:23