티스토리 뷰
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언어 코딩 도장 / 위키백과
'BackEnd > C' 카테고리의 다른 글
[23일차] 2. 공용체 / 열거형 / typedef (0) | 2021.03.06 |
---|---|
[23일차] 1. 구조체 배열/자기 참조 구조체 (0) | 2021.03.06 |
[22일차] 1. 구조체와 멤버 (0) | 2021.03.05 |
[21일차] 2. 동적 할당의 활용 / 명령행 인수 (0) | 2021.03.04 |
[21일차] 1. 동적 메모리 할당 함수 (0) | 2021.03.04 |
댓글