JINTBEAT Design Life

C언어 - 구조체(2) : 구조체, 배열, 그리고 포인터 본문

🖥️ - C language

C언어 - 구조체(2) : 구조체, 배열, 그리고 포인터

jintbeat_design 2025. 5. 30. 21:42
반응형

 

📚 구조체 배열의 선언과 접근

구조체 배열의 선언방법은 일반적인 배열의 선언방법과 동일하다. 

 

구조체로 jint를 만들고, jint형 배열선언의 관계는 다음과 같다.

struct jint arr[10]

 

따라서, jint형 구조체 배열을 선언하면, 

struct jint arr[4] ;

 

📚 구조체 변수와 포인터

jint형 구조체의 포인터 변수도 다음과 같이 선언하고 초기화한다.

struct jint *pptr = &pos ;

 

위의 jint형 포인터 변수 pptr을 이용해서 다음과 같이 구조체 변수 pos에 접근할 수 있다.

(*pptr).a = 10;

= pptr이 가리키는 구조체 변수의 멤버 a에 10 저장!

 

위의 문장은 다음과 같이 쓸 수 있다.

pptr->a=10;

 

즉, *연산과 .연산을 하나의 -> 연산으로 대신할 수 있다. 많은 프로그래머들은 편의상 -> 연산자의 사용을 즐긴다고 한다.

 

📚 포인터 변수를 구조체의 멤버로 선언하기

배열이 구조체의 멤버로 선언될 수 있듯이, 포인터 변수도 구조체의 멤버가 될 수 있다.

#include <stdio.h>

struct point 
{
	int xpos ;
	int ypos ;
};

struct circle
{
	double radius ;
	struct point *center ;
}

int main(void)
{
	struct point cen = {2,7} ;
    
	double rad = 5.5 ;
    
	struct circle ring = {rad, &cen} ;
    
	printf("원의 중심 [%d, %d] \n", (ring.center)->xpos, (ring.center)->ypos);

	return 0 ;
}

 

💡 포인터 변수도 구조체의 멤버가 될 수 있다.

💡 이로 인해서 구조체 변수 ring의 멤버 center가 구조체 변수 cen을 가리키는 형태가 되었다.

💡 구조체 변수 ring의 멤버 center가 포인터 변수이므로 ring.center를 대상으로 -> 연산을 해서, 구조체 변수 cen의 멤버에 접근해야 한다. 그리고 연산자의 우선순위 관계상 -> 연산자의 왼편에 있는 소괄호는 생략 가능하다.

 

 

반응형