-
C의 자료형의 표현[java와 비교]C, C++ 2018. 12. 12. 09:05
자바의 자료형
정수
실수
참거짓
Byte(1), short(2) int(4) long(8)
Char(2)à 음수표현불가
Float(4), double(8)
Boolean(1)
참조 자료형 : 객체, 배열, Enum, Annotation ,
C자료형
정수
실수
참거짓
Char(1)à음수표현가능,
short(2), int(4), Long(4)
**unsigned형태의 4개가 더 존재
Float(4), double(8)
없음.
단 모든 비트가 0=false
모든비트가 0이 아니면 =true
하지만 대체로 1을 사용함
응용 자료형: 배열(구조체- class 유사), 함수, 포인터(주소값), 나열형(enum), 공용체(union)
주소값의 type은 unsigned int (stack에 쌓이는 주소값…)
Char ch1 = ‘a’;
Char ch2 = ‘b’;
와 같이 선언한 경우 아래와 같이 스택에 쌓이게 된다.
b
a
100
101
102
103ßch2
104ßch1
그러나 byte 를 잡을 때는 컴파일러에 따라 조금식 다름.. char는 1 바이트지만 4byte씩 잡아서 1byte만 쓰고 나머니 3byte를 버리는 방식…(VS 윈도우 컴파일러 )
주소값을 찍어내게 되면
Printf(“%d\n”, sizeof(‘a’)); 실제는 1byte지만 찍어내는 순간 4byte씩 잡힌다.
배열?
- 같은 데이터 타입, 여러 개 선언
- Index로 접근 (음수인덱스가 가능)
Int a ; //4byte
Int b[5]// 20byte
Int c[5] = {1,2,3,4,5};
초기화할 때는 ={} 중괄호로… 변수 선언과 동시에 초기화 가능(자바와 동일)
배열명 = 주소 (배열의 5칸으로 선언하면 5칸의 할당됨)
주소값은 4byte 씩… 배열의 인덱스는 0~5까지만이지만 인덱스의 앞뒤로 값은 메모리에 존재하기 때문에
접근하는 것 자체는 가능하다 의미있는 값이 들어가 있지는 않음
번지수(주소)
100
104
108
112
116
120
1
2
3
4
5
인덱스
0
1
2
3
4
주소값출력시
&c[0],
&c
&c[1]
&c[2]
&c[3]
&c[4]
예) &c[0],&c은 다르다.
&C+1 = 120 (+1은 대표값을 더해준다는 의미임=포인터연산)
C의 값은 100 C의 대표값은 20(sizeof) 이므로 120
&C[0] +1 = 104가 나옴 (위와 같은 이유로)
int c[5] = {1,2,3,4,5};
printf("%d\n", &c+1);
printf("%d\n", &c[0]+1);
6422320 <--- 출력값 &c의 값인 6422300 + 20(배열 c의 사이즈)
6422304 <---- 배열 첫번째 방의 값인 6422300+ 4( 배열 한칸의 사이즈 4)
* 주소값은 본래 unsigned 부호값이 없음
'C, C++' 카테고리의 다른 글
포인터 (0) 2018.12.12 함수의 선언과 사용 (2) 2018.12.12 [IEEE 754] 부동소수점과 바이어스 표현법 (0) 2018.12.12 [20181207] 수의 체계2+ C언어 개요 (0) 2018.12.07 20181206]C 툴 설치+ 수의 체계(비트 연산기본 설명) (0) 2018.12.06