Pointer to Type

2022. 5. 2. 21:00C언어

// Type : 이진수 해석 방법

ex)char short int double 

 

//Memory :  이진수의 저장 공간 

나같은 경우에는 메모리 주소값은 못들어가는줄 알았는데 상관이 없었음 ㅠㅠ 

 

//Object : 메모리 사용 영역 -> Memory

int a; // int 타입의 객체 a을 할당 n(0x1234, 4byte) : ??  a이라는 객체를 만듬 type int 4byte
n = 10; // n(0x1234, 4byte) : 10  n의 값은 10
n : int  
10 : int

 

도식화를 그려보자

 

 

int* p; // int* 타입의 객체 p를 할당 p(0x1238, 8byte) : ??
p = &n; // p(0x1238, 8byte) : 0x1234
// = 연산자는 두 피연산자의 타입이 같아야 한다.

 

int *p 객체에 int n의 주소값을 가져와서 

int *p 객체에 값을 넣어줘서

 

int *p = 10; 이된다

 

1차원 배열포인터

int arr[5];
p = arr;
arr : int*

+ : 덧셈, 주소

'a' + 10; // 'k'

덧셈일 때는 두 피연산자가 산술 타입(정수, 문자, 부동 소수점)
주소일 때는 두 피연산자 중 하나가 포인터 타입

p // pointer to int  = int는 4byte 이고 int의 메모리주소값을 가르키고있으므로 곱연산이 들어간다.
p + 2; // sizeof(int) * 2 p의 값을 변화. p의 값에 8byte을 더한다 .  4X2 = 8byte

int (*p)[5]; // pointer to array(int[5])   int [5] = 4byteX5=20

char arr[20][10]; 이걸 이용하여 arr[15][5]; 값이 몇바이트인지 구하여라

 

char arr[20][10]; 이것은 바이트는 210이다.

 

arr[15] = *(arr + 15); // arr? pointer to array(char[10])   
                        // (arr + 15) => sizeof(char[10]) * 15 = 150byte
                        // *(arr + 15) => array(char[10])

arr[15][5] = *(*(arr + 15) + 5); // sizeof(char) * 5 = 5 // 155byte

arr[15][5] = 'c'; // 

 

 

'C언어' 카테고리의 다른 글

String 함수 정리  (0) 2022.05.02