


이것은 포인터 배열이다.
따라서 각각의 인덱스에는 주소값이 들어간다.
마찬가지로 0번째 인덱스가 100번지라면 student 배열의 주소값도 100번지다.
각각의 요소에 20,30,40번지가 들어간다.
주의) 인덱스의 번지와 요소의 번지는 다르다. 헷갈리지 말기.


연산자 우선순위에 의해 (c+1)=101번지다.
101번지의 값은 30인데, %s, 즉 주소값의 값을 출력하면 "bbb"다.
#include <stdio.h>
struct IceCream {
char name[50];
char flavor[50];
int calories;
float price;
char manufactureDate[11]; // YYYY-MM-DD 형식
char expirationDate[11]; // YYYY-MM-DD 형식
};
int main() {
// 아이스크림 구조체 변수 선언 및 초기화
struct IceCream chocoBanana = {
"초코바나나",
"초콜릿",
150,
3.50,
"2024-06-17",
"2025-06-17"
};
// 아이스크림 구조체 출력
printf("아이스크림 이름: %s\n", chocoBanana.name);
printf("아이스크림 맛: %s\n", chocoBanana.flavor);
printf("칼로리: %d\n", chocoBanana.calories);
printf("가격: %.2f\n", chocoBanana.price);
printf("제조일자: %s\n", chocoBanana.manufactureDate);
printf("유통기한: %s\n", chocoBanana.expirationDate);
return 0;
}
선언문을 생략하는 익명 구조체를 사용하면 코드의 길이를 줄일 수 있다.
#include <stdio.h>
int main() {
// 익명 구조체 선언 및 변수 초기화
struct {
char name[50];
char flavor[50];
int calories;
float price;
} chocoBanana = {"초코바나나", "초콜릿", 150, 3.50};
// 익명 구조체 변수 사용
printf("아이스크림 이름: %s\n", chocoBanana.name);
printf("아이스크림 맛: %s\n", chocoBanana.flavor);
printf("칼로리: %d\n", chocoBanana.calories);
printf("가격: %.2f\n", chocoBanana.price);
return 0;
}
struct person
{
char *name;
int age;
};
struct person *p;
p->name = "test_2";
p->age = 40;
printf("%s:%d", p-> name, p->age);
구조체를 포인터 변수에 담을 땐, 인스턴스의 변수를 대입할 때 .이 아닌 "->"를 사용한다.
안나오니까 스킵