Programming Language/C

A -> 1, B -> 2, C -> 3, ..., Z -> 26, AA -> 27, AB -> 28,...과 같은 원리로 문자를 바꿔야 한다. 딱 보기에도 규칙이 보이지만 코드로 써 보려니 어려웠다. 뼈대 코드 #include #include int col_to_num(char col[]) { int len = strlen(col); long long num = 0; int i=0; while (i
구조체 사용자가 C언어의 기본 타입들을 가지고 새롭게 정의하는 사용자 정의 타입 같은 타입의 변수 집합이 배열이라면, 구조체는 다양한 타입의 변수 집합 구조체를 구성하는 변수를 구조체의 멤버/멤버 변수라고 함 문법 선언 구조체는 struct 키워드를 이용해 정의 struct Person { char name[20]; int age; char address[100]; }; 이때, name, age, address는 구조체 Person의 멤버 변수 구조체를 더 편하게 사용하려면 앞에 매번 struct를 붙여야 함(Person 단독 사용 불가) 더 편하게 쓰기 위해 typedef를 같이 사용 (*typedef: 이미 존재하는 타입에 새로운 이름을 붙이려고 사용하는 키워드) typedef struct Perso..
개념 포인터는 어떤 변수의 메모리 주소 값을 저장하는 변수로, 선언과 역참조로 많이 사용된다. a: a가 가리키는 값 출력 &a: a가 저장되어 있는 메모리 주소 출력 선언과 역참조는 둘 다 *(애스터리스크, asterisk)를 기호로 사용하는데, 선언은 말 그대로 '선언' 시에만 사용하고(int *a; 같은 경우) 나머지는 대부분 역참조, 즉 포인터 변수의 값(=메모리 주소)에 접근해 그 주소에 저장된 실제 값을 빼 온다고 생각하면 된다. *s로 선언한 포인터 변수가 있을 때 *를 붙이지 않고 사용하면 메모리 주소 값 자체를 다룬다는 이야기이고, 선언할 때 이미 포인터 변수로 선언했으므로 역참조를 하지 않는 이상 *를 붙일 필요는 없다. 포인터 변수에 *가 붙는 경우 무조건 역참조라고 생각하자. 예제 ..
#include int main(void) { int a[] = {2, 3, 5, -7}; int *p, *q; // int 타입의 값을 저장하는 메모리 주소를 가리키는 포인터 for (int i=0; i
스토리지 클래스 C언어에서 기억 영역을 분류하기 위해 사용되는 언어로, 일반적으로 기억 영역 분류라고 번역됨 객체 지향의 클래스와는 관련 없음 auto, register, static, extern의 네 가지 종류로 나눠짐(각 키워드는 상호 배타적: 두 가지 이상의 키워드 함께 사용 X) 1. auto 지역 변수 선언 시 아무것도 지정하지 않았을 때 기본값으로 지정되는 클래스 사용할 일 거의 없음 2. register 변수를 메모리 대신 *레지스터에 저장하고 싶을 때 사용 but 반드시 레지스터에 저장되는 것은 X 메모리에 만들어진 변수가 아니므로 주소 연산자 '&' 사용 불가능 변수의 크기가 **레지스터 사이즈보다 작아야 함 최근의 컴파일러들은 알아서 레지스터를 잘 활용하기 때문에 이 지시자를 무시할 ..
입력 float a = 123.123456789f; printf("9.3f", a); printf("9.9f", a); 출력 245.123 245.123458862 소수점 앞의 9는 정수부, 소수점, 소수부를 포함한 모든 출력의 최소 길이, 소수점 뒤의 숫자는 소수점 아래 몇 자리까지 출력할 것인지를 나타낸다. 따라서 첫 번째 프린트문의 경우 최소 정수부, 소수점, 소수부 포함 최소 9자리를 사용해야 하는데 소수점 한 자리, 소수부 세 자리, 정수부 세 자리 해서 일곱 자리밖에 안 되니 공백으로 2자리를 채운다. decimal이나 string 출력 시 서식 문자를 %3d, %10s 이렇게 정수와 함께 입력하면 각각 최소 3자리, 10자리는 차지해야 한다는 말이 되므로 잘 계산해서 하면 문자열의 길이에 상..
ecc1
'Programming Language/C' 카테고리의 글 목록