프로그래밍
-
리틀 인디언과 빅 인디언프로그래밍/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..
-
VIM 초보자를 위한 글프로그래밍/기타 2019. 4. 22. 01:00
Vim Vim을 쓰는 이유는 뭘까!? 처음에는 같이 공부하는 대학교 선배의 권유로 반(?)강제적으로 썼다. 같이 문제 풀면서 옆에서 계속 알려주니까 2주정도만에 적응할 수 있었다. 그 후로 거의 vim을 쓴다. 다른 에디터에서도 플러그인으로 설치해서 쓰게 된다.. 편해서.. 대신, 진입장벽이 약간 높은데 익숙해지면 엄청 편해서 찾아 쓰게 된다! 시작은? 처음 vim을 사용할 땐, 리눅스 터미널로 코딩하면서 연습했는데 처음부터 이렇게 하는건 좀 더 어렵다고 생각한다. 그치만, 정확하게 배울 수 있다는 장점있다고 생각한다. 추천하는 에디터는 Sublime text에서 vim 모드를 지원하는데 제일 맘에 든다! 복사, 붙여넣기, 블록 설정 등을 vim 단축키와 더불어 일반 에디터에서 사용할 수 있는 ctrl ..
-
포인터와 배열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..