목록Programming (115)
Nagie's DevStory
const란 constant를 줄여서 사용하는 키워드다. 사전적 의미 그대로 변하지 않는 값 상수를 의미하며 C에선 const 키워드의 위치에 따라 의미가 달라진다. 아래의 코드는 일반적으로 상수형 변수를 선언할 때 작성하는 방법이다. //const를 사용한 상수형 변수 선언 const int num = 1; int const num = 2; 위의 예시에선 const의 위치가 달라도 의미는 상수형 변수라는 의미는 동일하다. 다만 const 키워드가 맨 앞에 위치하는 첫 번째 형식을 많이 사용한다. 그리고 상수형 변수를 선언할 때 무조건 초기화도 같이 해줘야 한다. 초기화가 되지 않은 채 값을 변경하려고 하면 문제가 생긴다.
typedef는 기존의 데이터형을 재정의할 때 사용한다. 예를 들면 시스템 예약어로 지정된 자료형 unsigned int를 생각해 보자. 저렇게 긴 자료형을 지속해서 타이핑하기엔 너무 귀찮으니 간단한 이름으로 재정의하고 싶을 때 쓴다. 아래는 기본적인 사용법이다. //typedef로 재정의 하기 typedef int INT; typedef unsigned int U_INT; //typedef로 재정의 된 자료형명 사용하기 int main () { INT a = 10; U_INT = b = 30; } 위의 예시에서 typedef가 자료형을 재정의할 때 사용한다고 했으니 사용자 정의 데이터 타입인 구조체에도 적용이 되지 않을까 생각할 수도 있는데 당연하게도 적용이 된다. 구조체를 typedef로 재정의하는 ..
구조체란 사용자가 정의하는 데이터 형식이다. 즉 프로그래머가 사용하려고 임의로 모아둔 변수의 집합이라고 생각하면 편하다. 사용 방법은 아래와 같다. //구조체 기본 사용법 struct MY_STRUCT { //멤버 변수들 삽입 int a; int b; }; struct 키워드 뒤 구조체의 이름을 정하고 멤버 변수를 집어넣는 게 끝이다. 다만 구조체의 이름은 대문자를 사용하는 게 관례기 때문에 될 수 있다면 대문자로 이름을 지어주도록 하자. 그리고 구조체 역시 프로그래머가 임의로 만들었지만, 변수의 일종이기 때문에 일반 변수처럼 선언해 사용 할 수 있다. 아래는 구조체를 선언하는 방법이다. struct MY_STRUCT { int a; int b; }; int main () { struct MY_STRUC..
3. 포인터 배열 포인터 역시 메모리 주소를 담는 변수기 때문에 배열을 생성할 수 있다. 주로 문자열을 다룰 때 사용된다 아래의 코드 처럼 사용할 수 있며 포인터 배열 역시 기존의 배열처럼 다차원으로 생성이 가능하지만 추천하진 않는다. 사용 예시는 아래와 같다. //기본 사용방법 int* pPtr[2]; pPtr[0] = (int*)malloc(sizeof(int) * 3); pPtr[1] = (int*)malloc(sizeof(int) * 6); //문자열 다루기 char* pPtr[3] = {"Hello,","World","!!!"}; //또는 char* pPtr[3]; pPtr[0] = "Hello,"; pPtr[1] = "World"; pPtr[2] = "!!!"; 4. 함수 포인터 함수의 메모리..
기존에 공부했던 포인터뿐만 아니라 C에는 여러 가지 포인터가 있다. //기본 포인터 int *pPtr; //이중 포인터 int **ppPtr; //배열 포인터 int (*pPtr)[3]; //열의 개수가 고정되어야함 //함수 포인터 int (*function)(int); //void 포인터 void* pPtr; //포인터 배열 int *pPtr[3]; 1. 기본 포인터 우리가 제일 처음 공부했던 포인터다. 가장 많이 사용하며 해당 변수의 메모리 주소를 저장한다. 사용 방법은 아래와 같다. int nVariable = 10; int* pPtr = &nVariable; 2. 이중 포인터 이중 포인터에서부터 조금 헷갈리기 시작한다. 이중 포인터는 포인터의 메모리 주소를 저장하는 포인터다. 위의 사진처럼 순차적..