2022. 5. 2. 21:00ㆍC언어
// 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 |
---|