C, C++

C의 자료형의 표현[java와 비교]

SuuuuuuuL 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  부호값이 없음