C, C++

[C] ๊ตฌ์กฐ์ฒด, ๊ณต์šฉ์ฒด

๋ฒผ๋ฆฌ01 2024. 8. 13. 13:45

๐Ÿ“Œ๊ตฌ์กฐ์ฒด(struct)

์‚ฌ์šฉ์ž ์„ ์–ธ ํƒ€์ž…. ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜•์„ ๋งŒ๋“œ๋Š” ๊ฒƒ.

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋‚˜ ๋ฐฐ์—ด๋„ ๋ฉค๋ฒ„๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ํฌ์ธํ„ฐ๋กœ ๊ตฌ์กฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

#include <stdio.h>

struct Student {
	char name[100];
	int age, height;
}

int main(){
	
    struct Student student;
    
    printf("์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”: ");
	scanf_s("%s", &student.name, sizeof(student.name));

	printf("๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”: ");
	scanf_s("%d", &student.age);

	printf("ํ‚ค๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”(cm): ");
	scanf_s("%d", &student.height);

	printf("[์ž…๋ ฅ ์ •๋ณด] ์ด๋ฆ„: %s, ๋‚˜์ด: %d์„ธ, ํ‚ค: %dcm\n", student.name, student.age, student.height);



	return 0; 
}

 

 

๊ตฌ์กฐ์ฒด ์ดˆ๊ธฐํ™”

#include <stdio.h>

struct Student {
	int number;
	char name[10];
	char grade;
};

int main() {

	struct Student s1 = { 123456, "Kim", 'A' };

	return 0;
}

 

 

๐Ÿ“Œ๊ตฌ์กฐ์ฒด ํฌ์ธํ„ฐ

ํฌ์ธํ„ฐ๋กœ ๊ตฌ์กฐ์ฒด์— ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๊ฐ„์ ‘ ๋ฉค๋ฒ„ ์ฐธ์กฐ ์—ฐ์‚ฐ์ž(->)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

#include <stdio.h>

struct student {
	char name[100];
	int age, height;
}st1[3] = {
	{"lch", 25, 178},
	{"kim", 30, 160},
	{"park", 40, 180}
};

int main() {

	student* pSt = st1;

	for (int i = 0; i < sizeof(st1) / sizeof(st1[0]); i++) {
		printf("์ด๋ฆ„: %s, ๋‚˜์ด: %d, ํ‚ค: %d\n", (pSt + i)->name, (pSt + i)->age, (pSt + i)->height);
	}

	return 0;
}

 

 

๐Ÿ“Œ๊ตฌ์กฐ์ฒด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐฉ์‹

struct student {
	char grade;
	int num, score;
}

 

์œ„์™€ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด๊ฐ€ ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๊ฐ๊ฐ์˜ ๋ฉค๋ฒ„๊ฐ€ `grade` 1byte, `num`๊ณผ `score`๊ฐ€ 4byte์”ฉ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง„๋‹ค.

* ์ด๋•Œ CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์„ ๋•Œ ํ•œ ๋ฒˆ์— ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”์ดํŠธ๋ฅผ ์ตœ์ ํ™”(ํŒจ๋”ฉ)ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ๊ตฌ์กฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฉค๋ฒ„ ์ค‘ ๊ฐ€์žฅ ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฉค๋ฒ„์˜ ์ž๋ฃŒํ˜•์˜ ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋„๋ก ์ •๋ ฌํ•œ๋‹ค.

 

 

๐Ÿ“Œ๊ณต์šฉ์ฒด(union)

๊ตฌ์กฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž…(์ž๋ฃŒํ˜•)์œผ๋กœ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฉค๋ฒ„๋กœ ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ์ž๋ฃŒํ˜•์„ ๋งŒ๋“ ๋‹ค. ๋‹จ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฐจ์ด์ ์œผ๋กœ ๊ฐ€์ง„๋‹ค.(๊ฐ€์žฅ ํฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.)

๊ฐ’์ด ๋ณด์กด๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋ฅธ ๋ฉค๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜๋ฏ€๋กœ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•„๋ผ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

union unTemp {
	char a;
	int b;
	double c;
}un;

int main() {

	un.a = 'A';
	printf("๋ฌธ์žํ˜• a: %c\n", un.a);

	un.b = 100;
	printf("์ •์ˆ˜ํ˜• b: %d\n", un.b);

	un.c = 3.14;
	printf("์‹ค์ˆ˜ํ˜• c: %.2f\n", un.c);


	printf("๋ฌธ์žํ˜• a: %c\n", un.a);
	printf("์ •์ˆ˜ํ˜• b: %d\n", un.b);
	printf("์‹ค์ˆ˜ํ˜• c: %.2f\n", un.c);

	printf("%x %x %x", &un.a, &un.b, &un.c);


	return 0;
}

 

๋ฌธ์žํ˜• a: A
์ •์ˆ˜ํ˜• b: 100
์‹ค์ˆ˜ํ˜• c: 3.14

๋ฌธ์žํ˜• a: 
์ •์ˆ˜ํ˜• b: 1374389535
์‹ค์ˆ˜ํ˜• c: 3.14

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ’: a: 9d23d1c0, b: 9d23d1c0, c: 9d23d1c0

 

 

 

 

 

๐Ÿ“Œ์ฐธ๊ณ 

 

 

๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ๋ฐฉ์‹

๊ตฌ์กฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ๋ฐฉ์‹์„ ์•Œ๋ฉด ๋ฉค๋ฒ„๋ณ€์ˆ˜๋“ค์„ ์„ ์–ธํ• ๋•Œ ์ข€ ๋” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ , ์ตœ์ ํ™”๋˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋‹ค.1. ๊ตฌ์กฐ์ฒด์˜ ๋ฐ”์ดํŠธ ํŒจ๋”ฉ๋ฐ”์ดํŠธํŒจ๋”ฉ์ด๋ž€ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ CPU๋กœ ์ฝ์„ ๋•Œ ํ•œ๋ฒˆ์—

sjh836.tistory.com

 

 

[C++] Union (๊ณต์šฉ์ฒด)

๊ณต์šฉ์ฒด(union)๋Š” ๊ตฌ์กฐ์ฒด(struct)์™€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ ๋ชจ๋“  ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•œ๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

velog.io

 

'C, C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] ์ƒ์†(Inheritance)  (0) 2024.08.29
[C++] ๊ฐ์ฒด ์ง€ํ–ฅ  (6) 2024.08.19
[C] ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น  (0) 2024.08.13
[C] C์–ธ์–ด ๊ธฐ์ดˆ  (0) 2024.08.09
[C++] ๊ธฐ์ดˆ  (0) 2023.08.25