본문 바로가기

C

22장 . 구조체와 사용자 정의 자료형 1

[구조체]

[구조체]

하나 이상의 기본 자료형을 기반으로 사용자 정의 자료형을 만들 수 있는 문법 요소

struct Point	//point 이름의 구조체 선언
{
    int x;
    int y;
}

[구조체 변수 선언]

struct point{
    int x;
    int y;
}p1,p2,p3;	//변수 선언1

struct point2{
    int x;
    int y;
};
    
int main(void)
{
	struct point2 p1,p2,p3;//변수 선언2
    
    p1.x=3;//멤버 접근
    
    struct p4={1,2};//초기화
    
    
}

[구조체 배열 선언]

 

struct Person{
	char name[20];
    char phone[20];
    int age;
};

int main(){
	struct Person pArray[3];	//배열 선언
    pArray={{"lee","333"},{"kim","123"},{"yeo","aaa"};	//초기화
    pArray[1].name="홍길동";	//두번째 요소 접근
    
    return 0;
}

[구조체와 배열 그리고 포인터]

[구조체와 포인터]

#include<stdio.h>

struct Person{
	char Name[20];
    char phone[20];
};

struct PersonInfo
{
	int age; 
	struct Person * pPer;
}

int main()
{
	struct Person man= {"Thomas","345-512"};
    struct person* pMan;
    pMan=&man;
    
    <구조체 포인터를 선언하여 구조체 변수를 가리킬때>
    
    //구조체 변수를 이용한 출력
    printf("name : %s\n",man.Name);
    //구조체 포인터를 이용한 간접 접근
    printf("name : %s\n",(*pMan).Name);
    //구조체 포인터를 이용한 멤버 접근 연산자로 간접 접근 (사용자 정의에서만 사용)
    printf("name : %s\n",pMan->Name);
    
    <구조체의 멤버로 포인터 변수가 선언되는 경우>
    
    //구조체 변수를 이용한 출력
    PersonInfo manInfo;
    manInfo.pPer=&man;
    
    printf("name : %s\n",manInfo.pPer->Name);
    
}

[구조체 변수와 주소값의 관계]

struct simple{
	int data;
    int data2;
};

int main()
{
	struct simple s={1,2};
    
    printf("address 1:%d\n",&s);
    printf("address 2:%d",&(s.data1));
    return 0;
}

구조체의 이름과 구조체 첫번째 멤버의 주소값을 대조해 본다면 같은 주소가 나온다

이는 구조체의 이름은 첫번째 멤버의 주소를 나타냄을 알 수 있다.