본문으로 바로가기

- 배열 통째로 옮기기 -



#include <stdio.h>

typedef struct _person        //먼저 그 사람의 정보를 위한 구조체 선언.
{
  char name[20];
  char phoneNum[20];
  int age;
}person;

int main(void)
{
  person arr = {"한지수""010-1717-0003"19};  //struct person 타입의 구조체 배열 형태로 그 사람들의 정보 값을 초기화.  
  person temp;
  person temp2;

  printf("%s %s %d\n", arr.name, arr.phoneNum, arr.age);

  temp = arr;          //배열에다 배열 값은 못 집어넣는다. 상수 = 상수 기에
              //허나, 이런식으로 그 배열값들을 다 집어 넣고 싶을때 구조체를 따로 선언하여 구조체 = 구조체 식으로는 복사 붙여넣기가 된다.
  printf("%s %s %d\n", temp.name, temp.phoneNum, temp.age);

  strcpy(temp2.name,arr.name);
  strcpy(temp2.phoneNum,arr.phoneNum);
  temp2.age = arr.age;

  printf("%s %s %d\n", temp2.name, temp2.phoneNum, temp2.age);

  printf("arr의 크기는 ? : %d byte",sizeof(arr));

  return 0;
}

/*
struct smart
{
  int iArr[5]
};

  smart A = {5,4,3,2,1};  // 이러한 형태로 이용이 가능 하다.
  smart B = A;
*/



- 구조체 메모리 저장 형태 -


#include <stdio.h>  //데이터간 장치간 통신할때 사용하는 프로그래밍 해 볼 것

typedef struct _smart
{
  int a;    
  char b;    
  short c;  
  int d;    
  char e;    
  short f;
  char g;
  int h;
  char i;
  char j;
  short k;
}smart;

int main(void)
{
  printf("구조체 type smart의 크기는 ? : %d Byte",sizeof(smart));

  return 0;
}
/* 스택 구조는 아래서 부터 변수가 선언 되는 것인데
20바이트를 차지하려면 밑에서부터 5칸을 차지 해야 한다.
★컴파일러가 32비트기에 4바이트에 맞추려고 노력중이다.
int 가 4바이트라 우선순위가 제일 높고 하나의 스텍을 쓰게된다.
허나, char 와 short는 1바이트와 끝에 2바이트를 생성하여 한바이트를 뛰어넘게 된다.
즉, int를(4바이트) 제일 좋아하고 그 다음을 short 형 (2바이트)를 그 다음으로 좋아하고
다시 정리하면 1 1 2 , 2 1 1 과 같다. 좋아하는 2바이트는 중간에 쓰게 되면 한칸 띄우고 한다.

ex) 5바이트를 보내려한다면 2바이트를 먼저 선언 후 , char 형을 세개 선언해줘야 순서가 맞다.
그리고 나서 8바이트 나머지를 선언하려 한다면 char형을 선언해준 다음 그 다음에 short를 선언해줘야
딱 맞는 8바이트 형태가 된다. 
*/