코딩도장

Unit 58 자료형 변환하기 -자료형 변환- 자료형을 지정하여 변환하는 것을 명시적 자료형 변환이라고 한다. 이 명시적 자료형 변환을 하는 방법은 변수나 값 앞에 (자료형)을 붙여주면 된다. (자료형) (자료형) #include int main() { float a = 1.23; // float형 변수 선언 int b = (int)a; // a의 형을 int로 바꾼 후 int형 변수 b에 저장 printf("%d", b); // b 출력 } 위 코드는 명시적 자료형 변환을 이용해 float형 변수 a의 값을 b에 저장한 코드다. int형으로 변환된 값 1이 출력되는 것을 볼 수 있다. 예전에는 명시적 자료형 변환 없이 int b = a; 형식으로 써줘도 작동은 했지만 컴파일 경고가 발생했었다. 하지만 ..
Unit 56 구조체 필드 사용하기 지금까지는 여러 자료형을 사용하여 해당 자료형의 크기만큼만 구조체에서 공간을 차지하도록 했는데, 비트 필드를 사용하면 bit 단위로도 값을 저장할 수 있다. 사용은 간단하다. struct { : ; }; 로 멤버를 선언하면 해당 비트만큼의 크기를 가진 멤버가 생성된다. #include typedef struct a { unsigned int a : 1; // 1bit unsigned int b : 2; // 2bit unsigned int c : 4; // 4bit } A; int main() { A a1; a1.a = 1; // a에 1 저장 0000 0001 a1.b = 4; // b에 4 저장 0000 0100 a1.c = 15; // c에 15 저장 0000 1..
Unit 54 공용체 사용하기 -공용체- 공용체는 구조체와 정의 방법은 같지만 멤버를 저장하는 방식이 다른 자료형이다. 구조체는 멤버들이 각각 공간을 차지하지만 공용체는 모든 멤버가 같은 공간을 공유한다. 공용체는 구조체와 달리 union 키워드로 정의하지만 형태는 구조체와 같다. union { }; #define _CRT_SECURE_NO_WARNINGS #include #include typedef union uni { char a[8]; // 8byte int b; // 4byte long long c; // 8byte } A; // 공용체 선언 int main() { A a; // 공용체 변수 선언 printf("%d\n", sizeof(a)); // 공용체 크기 출력 strcpy(a.a, "ab..
Unit 51 구조체 멤버 정렬 사용하기 -구조체 멤버 정렬- cpu가 메모리에 접근할 때 32bit는 4바이트 단위, 64bit는 8바이트 단위로 접근한다. 만약 32bit에서 cpu가 4바이트보다 작은 데이터에 접근한다면 실질적으로 더 작은 바이트만 사용하는 것이지만 사용은 4바이트만큼 해 비효율적이다. 따라서 c언어 컴파일러는 cpu가 메모리의 데이터에 효율적으로 접근할 수 있도록 구조체를 일정한 크기로 정렬을 한다고 한다. 무조건 정렬이 좋은 것은 아니다. 사진 같은 파일을 저장한다 가정할 때, 이런식으로 정렬이 일어난다면 사진이 깨져버릴 수 있다. 이런 경우 정렬을 사용하면 안된다. #include typedef struct stru { char x; // 1byte int y; // 4byte..
Unit 48 구조체 사용하기 -구조체 struct- 구조체는 관련 정보를 하나의 의미로 묶을 때 사용한다. 구조체는 자료를 체계적으로 관리하기 위해 c언어가 제공하는 문법이다. 구조체는 struct로 정의한다. 만드는 것은 struct { }; 으로 하면 된다. 예를 들어 학생 구조체가 있다 가정하면 struct Student { char name[20]; // 이름 int classNum; // 학번 int grade; // 학년 char gender; // 성별 }; 이런식으로 만들 수 있다. 이렇게 구조체로 학생에 사용되는 변수들을 만든다면, 한 학생을 만들 때마다 name1, name2 이런식으로 변수를 여러 개 만들 필요없이 하나로 손쉽게 관리 가능하다. 또한 구조체 안에 들어있는 변수를 멤버..
Unit 45 문자열 자르기 -strtok- strtok는 특정 문자를 기준으로 문자열을 잘라주는 역할을 한다. 마찬가지로 string.h 헤더에 선언돼 있다. 사용은 strtok(, );로 하면 된다. 자른 문자열을 반환하고 더 이상 자를 문자열이 없으면 NULL을 반환한다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char a[30] = "pwnable system hacking"; // 30 크기의 char 형 배열 선언 char *p = strtok(a, " "); // 공백을 기준으로 문자열 자르고 포인터 반환 while (p != NULL) // 문자열을 더 이상 자르지 못할 때까지 { printf("%s\n", p); /..
Unit 42 문자열을 복사하고 붙이기 -strcpy- strcpy는 문자열을 다른 배열이나 포인터로 복사해주는 함수다. strcmp 등과 마찬가지로 string.h 헤더에 선언돼 있다. 사용은 strcpy(, );로 하면 된다. strcpy 역시 취약점이 있는 함수이므로 #define _CRT_SECURE_NO_WARNINGS를 써줘야한다. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char a[10] = "Hello"; char b[10]; // 10 크기의 char형 배열 a, b를 선언하고 문자열 Hello를 a에 저장 strcpy(b, a); // a의 문자열을 b에 복사 printf("%s %s", a, b); // a, b..
Unit 39. 문자열 사용하기 전부터 느껴왔던 건데 이상하게 c언어에는 string, str 같은 자료형이 없다. char로 문자열을 넣고 실행하면 실행 오류가 뜨는데, 이번 Unit에서는 c언어로 문자열을 저장하는 방법에 대해 다룬다. -문자열 사용- 문자열을 사용하는 방법은 char를 포인터 형식으로 사용하면 된다. char * = ""; #include int main() { char *a = "Hello dypar!"; // 포인터 a에 Hello dypar! 문자열 저장 printf("%s", a); // a의 문자열 저장 } 위처럼 char를 포인터형으로 선언하고 출력 시 서식 지정자를 %s로 지정해주면 문자열이 그대로 출력된다. 1바이트인 char형에 문자열을 저장할 수 있는 원리는 바로 ..
-keyword- 1, 2, 3차원 배열, 1, 2, 3차원 배열 포인터, 다차원 배열 포인터 메모리 동적 할당 Unit 36. 배열 사용하기 -배열(Array)- c언어의 배열은 파이썬의 list와 비슷한 기능을 한다. 여러 값들을 한 변수에 저장하는 것이다. 파이썬과 똑같이 0부터 시작하는 인덱스를 갖고 여러 개의 값을 한 변수에 사용이 가능하다. 단 파이썬과 달리 c언어에서의 배열은 같은 자료형의 값들만 저장할 수 있다. 이 배열은 파이썬과 비슷하게 반복문으로 값을 한꺼번에 저장하거나 빼낼 때 주로 사용한다. 앞서 코드업에서 바둑판, 격자판 등도 이 배열을 이용해서 풀었다. 사용은 [] = {};로 한다. 꼭 배열을 선언하자마자 크기만큼 값들을 넣어줄 필요 없이 선언만 하고 나중에 값들을 넣어줘도 ..
// 날짜 대신 Unit 명을 써주고 문제들은 맨 아래에 모아서 풀이를 적어봤습니다. -keyword- 포인터, 역참조, 메모리 할당, malloc, free, 스택, 힙, memset Unit 34. 포인터 사용하기 -포인터(pointer)- 포인터란 c언어에서 메모리 주소값을 저장하는 변수다. 포인터 변수라고도 부른다.(참고 : tcpschool) int a = 1; 위는 간단하게 1로 초기화되는 int형 변수 a를 선언한 코드다. 사실 변수를 선언했을 때 마법처럼 짠하고 변수가 생성되는게 아닌 컴퓨터의 메모리에 일정 공간을 확보해서 그 공간에 변수의 값을 저장하고 가져오는 것이다. 이 메모리에서 해당 변수의 주소(위치)를 메모리 주소라고한다. 즉 위 int a = 1;이라는 코드가 실행될 때 컴퓨터..
dyp4r
'코딩도장' 태그의 글 목록