웹_프론트_백엔드/단과

[단과_C] 2020.03.23

shine94 2020. 3. 23. 21:10

1. char*(포인터 변수)는 대입연산자(=)를 쓸 수 있고 scanf_s()는 불가능하다

 

 

2. char[](포인터 상수)는 대입연산자(=)를 쓸 수 없고 scanf_s()는 가능하다

 

 

3. 구조체(변수의 집합)
1) 타입이다.

2) 묶음이다.

 


4. 구조체 선언
1) struct 태그명 { //회사에서는 주로 구조체명이라고 안부르고 태그명이라고 부름
        멤버변수명;
        ...
   };
   

2) typedef struct 태그명 {
        멤버변수명;
        ...
   } 타입으로 사용할 태그명;

 


5. 구조체 사용
1) struct 구조체명 변수명 = { 초기값, ... };
   struct 구조체명 변수명 = NULL;
   구조체명.멤버변수명 = 값;
   
2) 태그명 변수명 = { 초기값, ... }

 

 

6. 구조체와 배열
 : 배열은 같은 자료형의 값만 다룰 수 있으나.
   구조체는 다른 자료형의 값도 다룰 수 있다.

 


7. 구조체와 클래스
 : 구조체는 변수들만 선언할 수 있지만 클래스는 함수도 선언 가능하다.
   클래스는 C++, Java, Python에서 다룬다

 


8. 구조체 목적
 : 공통요소들을 한 군데에 묶에서 쉽게 관리하기 위해 사용한다.
   같은 자료형이라면 배열로 선언할 수 있지만,
   인덱스로 접근하는 배열은 각 방의 의미를 전달하기에 어려움이 있다.
   하지만 구조체는 각 방마다 이름이 있기 때문에 가독성이 좋다.

 

 

9. 오늘 실습코드
1) graph2.c

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>

void main() {
	//학생 수를 입력받고 그 만큼 동적할당
	//학생별 점수 입력
	//ㅂ한자를 누르면 x축과 y축을 이어서 그릴 수 있다.
	//│★
	//│★  ★
	//└──────

	char** arName = 0;
	int* arScore = 0;
	int cnt = 0;
	char temp[30] = "";

	printf("학생 수 : ");
	scanf_s("%d", &cnt);

	arScore = (int*)malloc(sizeof(int) * cnt);
	arName = (char**)malloc(sizeof(char*) * cnt);

	for (int i = 0; i < cnt; i++) {
		arName[i] = (char*)malloc(sizeof(char) * 30);
		printf("이름 : ");
		scanf_s("%s", temp, sizeof(temp));
		for (int j = 0; j < 30; j++) {
			arName[i][j] = temp[j];
		}
		printf("%s 학생 점수 : ", arName[i]);
		scanf_s("%d", arScore + i);
	}

	system("cls");
	for (int i = 10; i > 0; i--) {
		printf("%3d  │", i * 10);
		for (int j = 0; j < cnt; j++) {
			if (arScore[j] >= i * 10) {
				if (arScore[j] == i * 10) {
					//뚜껑
					printf(" ┌───┐ ");
				}
				else {
					//막대
					printf(" │   │ ");
				}
			}
			else {
				//공백
				printf("       ");
			}
			Sleep(200);
		}
		printf("\n");
	}
	printf("%3d  └─", 0);
	for (int i = 0; i < cnt; i++) {
		if (arScore[i] == 0) {
			printf("───────");
		}
		else {
			printf("┴───┴──");
		}
		Sleep(200);
	}
	printf("\n      ");
	for (int i = 0; i < cnt; i++) {
		printf(" %s ", arName[i]);
		Sleep(200);
	}
	printf("\n");

	for (int i = 0; i < cnt; i++) {
		free(arName[i]);
	}
	free(arName);
	free(arScore);
}

 

2) strDarr.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main() {
	char** arName = 0;
	char temp[30] = "";
	int cnt = 0;

	printf("명수 : ");
	scanf_s("%d", &cnt);

	arName = (char**)malloc(sizeof(char*) * cnt);

	for (int i = 0; i < cnt; i++) {
		arName[i] = (char*)malloc(sizeof(char) * 30);
		printf("이름 : ");
		scanf_s("%s", temp, sizeof(temp));
		for (int j = 0; j < 30; j++) {
			arName[i][j] = temp[j];
		}
	}

	for (int i = 0; i < cnt; i++) {
		printf("%s\n", arName[i]);
	}

}

 

3) structTest.c

#include<stdio.h>
#include<string.h>

//유휴메모리를 없애기 위해서 1byte씩 증가하도록 하는 명령어
#pragma pack(push, 1)

void main() {
	//구조체 안에 있는 멤버변수 중 byte수가 가장 큰 것으로
	//용량이 증가한다. 따라서 42byte만 할당하면 되는 것을
	//8byte용량으로 늘어나기 때문에 총 크기는 48byte가 된다.
	//6byte가 바로 유휴메모리이다.
	//struct tag_Animal {
	//	char name[30];
	//	int age;
	//	double weight;
	//};

	typedef struct Animal {
		char name[30];
		int age;
		double weight;
	}tag_Animal;

	//struct tag_Animal dog = {"찰리", 3, 2.76};
	tag_Animal dog = {"찰리", 3, 2.76};
	printf("%d\n", sizeof(dog));
	strcpy_s(dog.name, sizeof(dog.name), "찰스");
	printf("%s\n", dog.name);
	printf("%d살\n", dog.age);
}

 

4) structTest2.c

#include<stdio.h>
#pragma pack(push, 1)

typedef struct Car {
	char brand[30];
	int price;
	char color[30];
}tag_Car;

void main() {
	//너무 답답하다..!! 같은 타입이니깐...!!! 배열로 선언하자!!
	//tag_Car monCar = {"Benz", 9000, "Black"};
	//tag_Car dadyCar = { "BMW", 8000, "Blue" };
	//tag_Car myCar = { "Bentley", 35000, "white" };
    
	//짜잔...!! 배열로 한번에 묶어버렸오...!!!
	tag_Car cars[] = { { "Benz", 9000, "Black" },{ "BMW", 8000, "Blue" },{ "Bentley", 35000, "White" } };
	
	printf("%d\n", sizeof(tag_Car));
	printf("%d\n", sizeof(cars[0]));
	printf("%d\n", sizeof(cars));
	printf("length : %d\n", sizeof(cars) / sizeof(tag_Car));
}

'웹_프론트_백엔드 > 단과' 카테고리의 다른 글

[단과_자료구조] 2020.07.13  (0) 2020.07.14
[단과_C] 2020.03.24  (0) 2020.03.25
[단과_C] 2020.03.20  (0) 2020.03.22
[단과_C] 2020.03.19  (0) 2020.03.20
[단과_C] 2020.03.18  (0) 2020.03.18