본문 바로가기

웹_프론트_백엔드/C언어

(30)
2020.03.24 1. structArTest.c #include #pragma pack(push, 1) typedef struct Car { char brand[30]; int price; char color[30]; }tag_Car; #define L 3 void main() { tag_Car cars[L] = { 0, }; for (int i = 0; i < L; i++) { printf("[%d번째]\n", i+1); printf("자동차 브랜드 : "); scanf_s("%s", cars[i].brand, sizeof(cars[i].brand)); printf("자동차 가격 : "); scanf_s("%d", &cars[i].price); printf("자동차 색상 : "); scanf_s("%s", cars[i..
2020.03.23 1. char*(포인터 변수)는 대입연산자(=)를 쓸 수 있고 scanf_s()는 불가능하다 2. char[](포인터 상수)는 대입연산자(=)를 쓸 수 없고 scanf_s()는 가능하다 3. 구조체(변수의 집합) 1) 타입이다. 2) 묶음이다. 4. 구조체 선언 1) struct 태그명 { //회사에서는 주로 구조체명이라고 안부르고 태그명이라고 부름 멤버변수명; ... }; 2) typedef struct 태그명 { 멤버변수명; ... } 타입으로 사용할 태그명; 5. 구조체 사용 1) struct 구조체명 변수명 = { 초기값, ... }; struct 구조체명 변수명 = NULL; 구조체명.멤버변수명 = 값; 2) 태그명 변수명 = { 초기값, ... } 6. 구조체와 배열 : 배열은 같은 자료형의 ..
2020.03.20 1. dArTask.c #include #include #include void sortASC(int arData[], int length); void sortDESC(int arData[], int length); void main() { //정수 개수 입력받고 그 만큼 할당하기 //입력받은 정수로 오름차순(void 함수) 또는 내림차순(void 함수) 선택 후 결과 출력 //1.오름차순\n2.내림차순\n3.나가기 int* dArNum = 0; int length = 0; int choice = 0; char* dot[] = { ".", "..", "..." }; char* loading[] = { "■□□□□□□□□", "■■□□□□□□□", "■■■□□□□□□", "■■■■□□□□□", "■■■■■..
2020.03.19 1. void 포인터 : 타입이 정해져있지 않은 포인터 사용시 형변환 후 사용 2. 동적 배열 1) 동적할당(Dynamic allocation) malloc(크기) : 리턴타입은 void*이다. malloc(), 엠 얼로케이션, 말록이라고 불리움 헤더파일 필요 3. 자료형* 포인터명 = (자료형*)malloc(sizeof(자료형)*칸수); 4. 칸 수에 변수 사용이 가능하다. int* arData = (int*)malloc(sizeof(int)*length); 5. 동적 할당 clear(clear allocation) : 모든 비트를 0으로 만들어준다(초기화랑 개념이 다름) 자료형* 포인터명 = (자료형*)calloc(칸수, sizeof(자료형)); 6. 동적 할당 재설정(resize allocation..
2020.03.18 1. 포인터(주소값) 포인터 변수 포인터 상수(배열) : 값을 변경하기 위해서는 strcpy() 필요 변수 : 값을 담기 위한 저장공간 포인터 변수 : 주소값을 담기 위한 저장 공간 포인터 변수를 줄여서 포인터라고 부르기도 한다. 2. 포인터를 사용하는 이유 1) return값은 반드시 한 개여야 하기 때문에 포인터를 사용한다. 주소값은 유일하기 때문에(중복이 없기 때문에) 주소값을 다른 영역에 전달하면 (참조로 접근해서)값을 수정할 수 있다. 3. 포인터 확인하는 방법 1) 중단점 : F9 2) 디버그 : F5 3) 디버그클릭 > 창 > 자동 > 주소값 우클릭 > 값 복사 클릭 4) Ctrl + Alt + m, 1 : 메모리1 창 5) 주소 붙여넣기 6) 다음 줄 디버깅 : F10 4. 이중 포인터 :..
2020.03.17 1. 다른 파일의 변수를 사용하고 싶을 때는 전역변수로 선언한 후 사용할 파일에서 extern키워드로 선언한다. 2. 다른 파일의 함수를 사용하고 싶을 때에는 헤더파일에 선언 후 사용할 파일에서 #include키워드로 사용한다. 3. 전역 변수가 먼저 있었고 메모리 관리를 위해 지역 변수가 생김 4. 오늘 실습 코드 1) 헤더파일 선언 후 함수 사용, 다른 파일에 있는 변수 사용하기 예제 ** storage_class.c ** #include //정적변수는 해당 파일에서만 사용 가능하다. //static int data = 100; //전역변수는 다른 파일에서 extern 키워드로 선언하면 사용 가능하다. int data = 100; //void main() { ////function(); //print..
2020.03.16 1. 기억 저장 부류 해당 파일만 가능 : 정적변수 다른 파일도 가능 : 전역변수 2. 오늘 실습 코드 1) functionTask.c #include #include /* [고급] 4자리 정수를 한글로 바꿔주는 함수 5개의 정수를 오름차순으로 정렬하는 함수 */ //5개의 정수를 입력받고 최소값과 최대값을 구해주는 함수 //int* getMaxAndMin(int arData[], int length) { ////result[0] : 최대값 ////result[1] : 최소값 //int result[2] = { arData[0], arData[0] }; //for (int i = 1; i < length; i++) { //if (result[0] < arData[i]) { //result[0] = arD..
2020.03.13 1. 헤더파일 : 기존 헤더파일은 로 추가하고 사용자가 만든 헤더파일은 ""로 추가한다. 페이지 상단(헤드)에 포함시키기 때문에 헤더파일로 명명하고 여러 함수들을 정의해놓은 후 다른 파일에 포함시켜 사용한다. 2. 헤더파일 생성(헤더파일 우클릭 > 추가 > 새항목, Ctrl + Shift + A) 3. 함수를 사용하는 이유 1) 반복되는 기능(작업)을 쉽게 관리하기 위해서, 재사용의 목적 리턴값이 있고 특정성을 부여해서는 안된다. 2) 소스코드 간결화 대부분 리턴값이 없다. 4. 리턴을 사용해야 할 때 : 함수 내에서 모든 작업이 완료되지 못할 때 사용하는 부분에 작업의 결과를 알려야 할 때 5. 리턴을 사용하지 않을 때 : 함수 내에서 모든 작업이 완료될 때 사용하는 부분에 작업의 결과를 알릴 필요가 ..
2020.03.12 1. 함수 : 이름() 단, 키워드()는 함수가 아니다. 예) for(), if(), ...는 함수가 아니다. 2. 함수의 정의 (1)리턴타입 (2)함수명(자료형 (3)매개변수, ...) { (4)실행할 문장; (5)return 리턴값; } (1) 리턴값의 타입을 작성한다. 만약 리턴이 없으면 void를 작성한다. (2) 동사로 작성한다(연필(매개변수)을 쓴다(함수)). (3) 생략이 가능하다. 매개변수가 없으면 외부에서 값을 전달받을 수 없다. (4) 생략이 가능하다. (5) 생략이 가능하다. 3. 함수 정의시 주의사항 : 선언은 함수 밖에서, 사용은 함수 안에서 한다. 사용하는 라인보다 위에 선언되어 있어야 한다. 위에서 아래로 읽기 때문이다. 만약 사용하는 라인보다 밑에 선언되어 있다면 함수 선언를..
2020.02.27 1. 오늘 실습코드 1) boss.c #include #define R 3 #define C 2 void main(){ //강남점 (일반 키즈) //신촌점 (일반 키즈) //홍대점 (일반 키즈) //각 지점별 매출액 저장소(2차원 배열 3행 2열) int arrIncome[R][C] = { 0, }; //지점 명칭에 규칙성 부여 //포인터자료형 앞에 const는 참조상수 //포인터명 앞에 const는 상수 char arBranchName[R][100] = { "강남점","신촌점","홍대점" };//수정 가능 //const char* arBranchName[R] = { "강남점", "신촌점","홍대점" };//수정 불가능 //연령별 명칭에 규칙성 부여 char arAgeName[C][100] = { "일반..