Brise
C언어의 변수형 정리 본문
--
보이드(void)
변수형이 지정되지 않은 경우. 일반적으로 포인터 연산에 사용됨.
void(1 워드)
e.g.) void point;
정수형(signed)
음의 정수, 0, 양의 정수를 표현할 수 있는 변수형
char (8 비트)
short (16 비트)
int (1 워드)
long (32 비트)
long long (64 비트)
* int의 경우 16 또는 32비트이다.
e.g.) char variable = 0;
양의 정수(unsigned)
0과 양의 정수를 표현할 수 있는 변수형
unsigned char (8 비트)
unsigned short (16 비트)
unsigned int (1 워드)
unsigned long (32 비트)
unsigned long long (64 비트)
* unsigned int의 경우 16 또는 32비트이다.
e.g.) unsigned char variable = 0;
>> 어떤 자료형이 어떤 비트수를 가지고 있는지 외우기 어렵다면
#include <stdint.h>를 포함시켜 아래와 같이 변수선언을 간편하게 할 수 있다.
e.g.)
#include <stdint.h>
uint8_t variable=0; // unsigned char와 같은 변수형
int32_t variable2=0; // long과 같은 변수형
부동소수점(floating point)
지수부와 가수부로 나뉘어 수를 표현하는 변수형, 작은 수부터 큰 수까지 넓은 범위를 표현할 수 있고,
오버플로우의 위험성이 낮지만, 언더플로우의 위험성을 가지고 있으며, 정확한 값의 계산이 어렵다.
또한 FPU가 탑재되지 않은 경우 심각한 연산속도 저하를 가져올 수도 있다.
float(32 비트)
double(64 비트)
* 아키텍쳐에 따라 32비트만을 지원할 수도 있다.
배열(Array)
위에 언급되어 있는 변수형들을(같은 변수형끼리) 나열하여 사용할 수 있는 변수. 인덱스는 0번부터 지정되며, 제대로 사용하기 위해서는 포인터에 대한 이해가 필수적이다.
인덱스는 0번부터 시작하는 것이 C언어의 특징이다.
e.g.)
char array[10]={0,1,2,3,4,5,6,7,8}; // char 10개짜리 배열을 선언 마지막 인덱스(10번째)는 초기화되지 않았으므로 0으로 선언된다.
array[0] = 2; // 0번 인덱스(0)의 값을 2로 바꿈.
int array2[]={1,2}; // 사이즈를 비워둘 경우 초기화가 되는 양만큼만 선언된다 (사이즈 2)
unsigned int a[3][4]; //4개짜리가 3개 있는 배열을 선언
<출처 : http://kama1204.tistory.com/entry/%EB%B0%B0%EC%97%B4-%EC%9D%B4%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4>
구조체(struct)
위에 언급되어 있는 변수형들을(다른 변수형들도) 묶어서 선언할 수 있는 방식. 일반적으로 typedef와 같이 묶어서 간편하게 선언하는 경우가 많다.
e.g.)
typedef Name1 Name2; // Name1을 Name2로 대체하여 선언
struct S {
int x;
int y;
}S1;
// int형 변수 x와 y가 들어간 구조체 S를 정의하고 S1이라는 이름의 struct S형 변수를 선언
typedef sturct SS {
int a;
char b;
} SS1;
// a와 b가 들어간 구조체 SS를 정의하고 typedef구문을 이용하여 struct SS형의 변수를 SS1으로 대체선언
-->
struct SS m1;
SS1 m2;
와 같이 선언 가능
나열형,열거상수 (enum)
정수만을 나열하여 선언 가능한 변수형식. 숫자를 따로 선언하지 않아도 자동적으로 증가하는 것이 특징이다.
e.g.)
enum (Name) { a,b,c=10,d=10,e};
a=0
b=1
c=10
d=10
e=11
typedef enum rome {a,b,c,d,e} alphabet;
enum rome aa = a;
alphabet bb = b;
*c언어의 경우 제한이 느슨하기 때문에 다른 나열형에서의 값도 넣는게 가능하므로 주의해야한다. c++의 경우 enum class로 해결한듯하다.
--
'프로그램 > C,C++' 카테고리의 다른 글
2차원 배열 동적할당 (0) | 2015.12.19 |
---|---|
2차원 포인터의 값과 주소 접근 방식 (0) | 2015.12.12 |
C언어 표준매크로 (0) | 2015.08.20 |
Call by value, Call by reference (0) | 2015.05.11 |
2차원 배열 함수 호출 예제 (0) | 2015.05.11 |
함수 포인터 배열 예제 (0) | 2015.02.13 |
Efficient C coding (0) | 2014.09.30 |