const는 바로 뒤에있는 키를 상수로 고정한다.
int value = 42;
const int* p = &value;
p = &value; // OK
*p = 10; // error
int value = 42;
int* const p2 = &value;
p2 = &value; // error
*p2 = 10; // OK
int value = 42;
const int* const p = &value;
p = &value; // error
*p = 10; // error
short*(*(*var)())[5];
1. var; // The identifier 'var' is declared as
2. *var; // a pointer to
3. *var(); // a function returning (함수가 리턴한게 포인터(주소값 가져옴))
4. *(*var)(); // a pointer to
5. *(*var)()[5]; // an array of 5 elements, which are
6. *(*(*var)())[5]; // pointers to
7. short*(*(*var)())[5]; // short values
형변환에는 두가지가 있음
double a = 10; // double형에 정수 10, a=10.0으로 자동형변환
int b = 10.5; // int형에 실수 10.5, b=10으로 자동형변환, 데이터 손실 주의
int c = 385;
char d = c; // c 표현하면 1 1000 0001 인데 char형이 1바이트밖에 못봐서 1000 0001
//= -129, 상위 바이트 손실
short a = 10, b = 15;
short result = a + b; // a, b는 int로 형변환(승격) result도 int로 형변환
double a = 12.5 + 10; // 12.5 + 10.0, 데이터 손실 최소화 방향으로 진행
int a = 5, b = 4;
double result = 0;
result = a/b; // 1 나옴, int 연산후 double 대입한 결과
result = (double) a/b; // 1.25000 나옴, (double)a로 실수 형변환 후 연산 결과
#include <stdio.h>
int main()
{
// 주소 연산 방식
int arr[3] = {1,2,3};
printf("arr[0] : %d\n", arr[0]); // arr[0] 값 1
printf("arr : %d\n", arr); // 배열 이름 = arr[0] 주소
printf("arr+1 : %d\n", arr+1); // arr[0] 주소+4 (arr[1])
printf("*(arr+1) : %d\n", *(arr+1)); // arr[1] 값 2
// 포인터 배열
char* data[] = {"가나다", "ABC", "포인터"};
// 포인터를 요소로 갖는 포인터배열 data
int i;
for(i=0; i<3; i++)
{
printf("data+%d : %d\n", i, data+i);
printf("data[%d] : %s\n", i, data[i]);
}
// 배열 포인터
char arr2[3][7] = {{1,2,3,4,5,6,7}, {11,12,13,14,15,16,17}, {21,22,23,24,25,26,27}};
// char 7칸짜리 1차원 배열을 3개 가지는 2차원 배열 arr2
char (*data2)[7]; // char[7] 배열들의 주소값을 가리키는 배열 포인터 data2
data2 = arr2; // data2는 arr2를 가리킨다
int j;
for (j=0; j<3; j++) {
printf("*(data2+%d): %d\n", j, *(data2+j)); // char[7]배열들 주소
printf("*(*(data2+j)): %d\n", *(*(data2+j))); // char[7]배열들 주소에 들은 값
}
return 0;
}
참고되었습니다. 감사합니다. ^^