티스토리 뷰

BackEnd/C

[22일차] 2. 구조체 변수 활용

JINSUKUKU 2021. 3. 5. 17:06

2021.03.05.금

구조체 변수의 초기화와 대입 연산
struct student{
  int num;
  char name[20];
  double grade;
};

struct student s1 = { 21, "홍길동", 2.4 };

✔ 구조체 변수도 일반 변수와 같이 선언과 동시에 초기화가 가능하다.

✔  하지만 여러 멤버를 초기화해야 하므로, 배열 초기화와 비슷한 방법을 사용해야 한다.

✔  초깃값을 중괄호로 묶고 각 멤버의 형태에 맞는 값으로 초기화.

struct student temp;
struct student s1={315, "유리", 2.4};
struct student s2={316, "짱구", 3.7};
struct student s3={317, "철수", 4.4};

temp = s1; //s1 멤버의 값이 복사되어 temp에 저장

✔ 구조체 변수에 같은 구조체 변수를 대입할 수 있다.

 

 

구조체 변수를 함수의 매개변수에 사용하기
struct score{
  double math;
  double english;
};

....

struct score swap_struct(struct score s1){
  double temp = s1.math;
  s1.math = s1.english;
  s2.english = temp;
  return score;
}

✔  구조체 변수는 대입 연산이 가능하므로, 함수의 인수나 반환 값으로 사용할 수 있다.

 

 

구조체 포인터와 -> 연산자
struct 구조체명 * 포인터명 = 구조체의 주소;
struct score *ps = &kuku;

✔  구조체 변수는 여러 멤버를 가지고 있긴 하지만, 구조체 변수는 단지 변수일뿐이다.

✔  따라서 구조체 변수에 주소 연산자를 사용하면, 구조체 변수 전체의 주소가 구해진다.

✔  그리고 구조체 변수의 주소를 저장할 때에는 구조체 포인터를 사용해야 한다.

✔  구조체 포인터는 위와 같은 형태로 선언되며, 자료형이 동일한 구조인 경우에만 저장 가능하다.

(*ps).kor = 80;
ps - > kor = 90;

✔  포인터명에 간접 참조 연산자 * 과 멤버 접근연산자. 을 모두 사용해서 값을 사용할 수 있다.

✔  하지만 멤버 접근 연산자 . 가 간접 참조 연산자 * 보다 우선순위가 높으므로

✔  간접 참조 연산자가 먼저 연산되도록 괄호로 묶어주어야 한다.

#include <stdio.h>

struct score		
{
  int kor;		
  int eng;		
  int math;		
};

int main(void){
  struct score ku = { 90, 80, 70 };   
  struct score* ps = &ku;     

  printf("%d\n",(*ps).kor);	//90
  printf("%d\n",ps->kor);   	//90
  printf("%d\n",ps->math);	//70
  return 0;
}

✔  매번 괄호를 사용하기 번거롭다면, 같은 기능을 하는 -> 연산자를 사용하자.

✔  연산자 ->를 구조체 포인터 변수에 사용하면, 구조체 멤버에 저장된 값에 접근할 수 있다.

 

 

 

 

[참고] 한빛미디어-혼자 공부하는 C언어 유튜브 강의 / 엘리스 트랙-혼자 공부하는 C언어 / 길벗-C언어 코딩 도장 / 위키백과

댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday