C 포인터 4

[ C ] 10. 함수와 포인터

[ 함수와 포인터 ] void 포인터 매개변수 사용하기 void 포인터 매개변수를 사용하면 자료형 변환을 하지 않아도 모든 자료형을 함수에 넣을 수 있다. 이번에는 char, int, float형을 매개변수로 받아서 값을 서로 바꿔보겠다. #include enum TYPE { TYPE_CHAR, TYPE_INT, TYPE_FLOAT }; void swapValue(void *ptr1, void *ptr2, enum TYPE t){ switch(t){ case TYPE_CHAR:{ // 문자면 char *로 변환한 뒤 역참조하여 값을 서로 바꿈 char temp; temp = *(char *)ptr1; *(char *)ptr1 = *(char *)ptr2; *(char *)ptr2 = temp; break..

[ C ] 05. 메모리와 포인터의 사용

[ 메모리와 포인터의 사용 ] #include #include // malloc, free 함수 int main(){ int *numPtr; // int형 포인터 선언 numPtr = malloc(sizeof(int)); // int의 크기 4바이트만큼 동적 메모리 할당 *numPtr = 10; // ****포인터를 역참조 한뒤 값 할당**** printf("%d\n", *numPtr); // 10 , 포인터를 역참조하여 메모리에 저장된 값 출력 free(numPtr); // 동적 메모리 해제 return 0; } malloc함수에 실제로 값을 저장할 때는 시스템의 한계(RAM, 디스크)이상 저장할 수 없다. 메모리 내용을 한꺼번에 설정하기(memset) memset함수를 사용하면 메모리의 내용을 원하는..

[ C ] 04. 포인터의 형변환

[ 포인터의 형변환 ] #include #incldue // malloc, free 함수가 선언된 헤더파일 int main(){ int *numPtr = malloc(sizeof(int)); // 4바이트만큼 메모리 할당 char *cPtr; *numPtr = 0x12345678; cPtr = (char *)numPtr; // int 포인터 numPtr을 char 포인터로 변환. 메모리 주소만 저장됨 printf("0x%x\n", *cPtr); // 0x78 : 낮은 자릿수 1바이트를 가져오므로 0x78 free(numPtr); // 동적메모리 해제 return 0; } # 실행 결과 0x78 numPtr에 메모리를 할당하고 역참조하여 0x12345678을 저장했다. 그리고 cPtr = (char *)n..

[ C ] 03. 포인터와 역참조 연산자

[ 포인터와 역참조 연산자 ] 포인터 변수에는 메모리 주소가 저장되어 있다. 이 때 메모리 주소가 있는 곳으로 이동해서 값을 가져오고 싶다면 역참조 연산자 *를 이용한다. #include int main(){ int *numPtr; // 포인터 변수 선언 int num1 = 10; // 정수형 변수를 선언하고 10 저장 numPtr = &num1; // num1의 메모리 주소를 포인터 변수에 저장 printf("%d\n", *numPtr); // 10 // 역참조 연산자로 num1의 메모리 주소에 접근하여 값을 가져온다 return 0; } # 실행 결과 10 역참조 연산자 *는 포인터 앞에 붙인다. 다음과 같이 numPtr 앞에 *를 붙이면 numPtr에 저장된 메모리 주소로 가서 값을 가져온다. 여기..