프로그래밍/C, C++
-
리틀 인디언과 빅 인디언프로그래밍/C, C++ 2019. 5. 3. 00:28
빅 인디언(Big Endian) 읽기 좋은게 빅 인디언입니다. 메모리에 값이 순서대로 저장되기 때문에, 보기에도 편합니다. 통신할 때는 빅 인디언을 사용한다고 하네요 그래서 리틀 인디언을 사용하는 시스템에서는 바이트를 뒤집에서 보내야됩니다. 리틀 인디언(Little Endian) 인텔에서 사용되는 저장방법으로 낮은 바이트가 낮은 주소로 대입됩니다. 그래서 읽을 때, 뒤에서부터 읽어야됩니다. 쓰는 이유는........ 잘 모르겟습니다.. 장점이 있다고는 하는데 이해가 잘 안되네요.. 포인터에서 보는 방법 이전 포스트에 있지만 int a = 0x12345678; printf("%x", *(char *)&a); 위의 코드에서 1바이트만 읽었음에도 불구하면 12가 출력되는 것이 아니라, 78이 출력됩니다. 이유..
-
포인터 타입 캐스팅(void 포인터)프로그래밍/C, C++ 2019. 5. 2. 00:19
포인터 타입 캐스팅2 포인터는 포인터가 가리키고 있는 것을 어떻게 바라보겠냐는 것의 대한 선언(?)이라고 생각합니다 int *ptr; // int 을 바라본다 char *ptr1; // char 을 바라본다 double (*ptr2)[4]; // double [4] 을 바라본다그래서 이전 포스트에서 int 변수를 char *로 강제 캐스팅한 뒤, 받아서 가리켜서 출력해봤습니다 --- void 포인터란? void 포인터란 아무 포인터나 다 들어갈 수 있습니다. (함수포인터 제외) 다만 포인터는 참조하고 있는 것이 어떤 크기인지 알아야 해당 크기만큼 가져오게됩니다 int 형은 4바이트, int [4]는 16바이트, char 형은 1바이트겠죠?! 그래서 void 형 포인터를 사용할 때는 바라보는 기준이 없기 ..
-
포인터 타입 캐스팅프로그래밍/C, C++ 2019. 4. 30. 00:25
타입 캐스팅 타입 캐스팅이란!? 자료형 변환이다. 자동으로 타입 캐스팅되는 것이 있고 강제로 해야줘야되는 것이 있다. int num = 10; double db; db = (double)num / 3; // db = 3.333, num을 강제로 double형으로 바꿔서 계산 db = num / 3; // db = 3.0000, int / int 는 int라서 db에 3저장 포인터 타입 캐스팅 포인터 타입캐스팅은 바라보는 거를 바꾼다! (..?) int main(){ int a = 0x12345678; char *ptr = (char *)&a; // a를 바라보는 크기를 char의 크기만큼으로 바꾸고 바라본다! printf("%x", *ptr); }그림으로도 이해가 안될지도 모르겟습니다 int a = 0x..
-
함수 포인터프로그래밍/C, C++ 2019. 4. 26. 00:06
함수 포인터 함수 포인터란!? 함수의 주소를 가리키는 포인터입니다! 함수의 주소는 어떻게 표현할까요? int add(int a, int b){ return a + b; } int main(){ printf("함수의 주소 %x, %x, %x\n", add, &add, *add); // 다 같은 주소 출력 printf("함수 호출 %d %d %d", add(2,3), (&add)(2, 3), (*add)(2, 3)); // 모두 같은 값 출력 }add나 &add, *add 모두 같은 주소를 리턴하고, 그것을 가지고 호출을 해도 같은 함수를 호출합니다 (이유는 잘 모릅니다...) 함수 포인터의 선언 함수의 리턴과 넘겨지는 인자의 타입을 똑같이 선언하면됩니다! 아래 예시를 보면 금방 이해되요 int add(in..
-
포인터와 배열1프로그래밍/C, C++ 2019. 4. 21. 23:23
포인터와 배열 포인터는 배열과 정말 많이 쓰인다. 이유는 잘 모르겠지만 .. 아마 배열이 메모리 구조상 연속적으로 되어있고 배열을 함수의 인자로 넘길 수 없어 포인터로 받아서 원하는 작업을 해야되기 때문이라고 생각한다. 배열의 특징 배열의 이름은 배열의 시작주소이다 배열의 첫번째 요소는 배열의 시작주소이다. int arr[4] = {1,2,3,4}; if(&arr[0] == arr) printf("Same!"); 배열이 배열전체로 쓰이는 경우는 sizeof함수와 & 연산자가 붙었을때 뿐이다. int arr[4] = {1,2,3,4}; printf("arr배열의 사이즈 : %d\n", sizeof(arr)); printf("arr 주소 : %x, arr[1] 주소 : %x, arr+1 값 : %x\n", ..
-
포인터 연산프로그래밍/C, C++ 2019. 4. 17. 00:00
포인터 연산 포인터 변수가 지원하는 사칙연산은 더하기와 빼기 밖에 안됩니다. 곱하기나 나누기를 쓸 경우, 에러를 발생합니다! #include int main(){ int a = 10; int *ptr = &a; ptr++; ptr--; // ptr *= 2; Error! //ptr /= 2; Error! }그리고 더하기, 빼기 연산의 결과는 포인터가 가리키고 있는 변수의 크기 만큼 증가하거나 감소한다! 아래의 예제에서 보면 이해할 수 있을 것이담 #include int main(){ int a = 10; int *ptr = &a; printf("ptr : %x, ptr + 1 : %x\n", ptr, ptr+1); int arr[4] = {1,2,3,4}; int (*ptrArr)[4] = &arr; p..
-
포인터 기본프로그래밍/C, C++ 2019. 4. 16. 00:00
포인터 포인터란 다른 변수나 함수를 가리키기 위해 만들어진것이다. 따라서 포인터 변수 안에는 가리키는 것의 주소가 들어있다. 아래는 포인터의 아주 간단한 예제다. #include int main(){ int a = 10; int *ptr; // 포인터 변수 선언 자료형 * 변수명 ptr = &a; // 포인터에 a의 주소값 대입 printf("a의 주소 : %x\n", &a); printf("ptr안에 든 값 : %x\n", ptr); printf("ptr이 가리키는 것의 값 : %d\n", *ptr); //선언이 아닌 곳에서 *은 포인터가 가리키고 있는 것의 값 return 0; }실행결과 a의 주소 : 62fe1c ptr안에 든 값 : 62fe1c ptr이 가리키는 것의 값 : 10 메모리 구조 포인..