포인터4 [열혈 C 프로그래밍] '형(Type)'이 존재하지 않는 void 포인터 다음과 같이 선언되는 포인터 변수를 가리켜 'void형 포인터 변수'라 한다. void * ptr; void형 포인터 변수는 무엇이든 담을 수 있는 바구니에 비유할 수 있다. void형 포인터 변수에는 어떠한 변수의 주소 값이든 담을 수 있다. 하다못해 함수의 주소 값도 담을 수 있다. #include void SoSimpleFunc(void) { printf("I'm so simple"); } int main(void) { int num=20; void * ptr; ptr=# // 변수 num의 주소 값 저장 printf("%p \n", ptr); ptr=SoSimpleFunc; // 함수 SoSimpleFunc의 주소 값 저장 printf("%p \n", ptr); return 0; } 하지만.. 2022. 12. 28. [열혈 C 프로그래밍] 적절한 함수 포인터 변수의 선언 포인터 변수에는 반환형 정보와 매개변수 선언의 정보가 모두 표현되어 있어야 한다. #include void SimpleAdder(int n1, int n2) { printf("%d + %d = %d \n", n1, n2, n1 + n2); } void ShowString(char * str) { printf("%s \n", str); } int main(void) { char * str = "Function Pointer" int num1=10, num2=20; void (*fptr1)(int, int) = SimpleAdder; void (*fptr2)(char *) = ShowString; /* 함수 포인터 변수에 의한 호출 */ fptr1(num1, num2); fptr2(str); return 0.. 2022. 12. 28. [C 언어] 포인터의 대입 규칙 포인터는 크기가 모두 같으므로 대입 연산을 쉽게 생각할 수 있습니다. 그러나 다음 규칙에 따라 제한적으로 사용해야 합니다. ※규칙1 - 포인터는 가리키는 변수의 형태가 같을 때만 대입해야 합니다. 포인터끼리 대입 연산을 수행하면 여러 개의 퐃인터로 같은 데이터를 다루는 것이 가능합니다. 그러나 규칙을 지키지 않는 대입 연산은 그 결과를 예상할 수 없습니다. // 허용되지 않는 포인터 대입 #include int main(void) { int a = 10; // 변수 선언과 초기화 int *p = &a; // 포인터 선언과 동시에 a를 가리키도록 초기화 double *pd; // double형 변수를 가리키는 포인터 pd = p; // 포인터 p 값을 포인터 pd에 대입 print(%lf\n", *pd);.. 2022. 12. 7. [C 언어] 주소와 포인터의 크기 포인터도 저장 공간이므로 그 크기가 있다. 포인터의 크기는 저장할 주소의 크기에 따라 결정되는데 크기가 클수록 더 넓은 범위의 메모리를 사용할 수 있다. 포인터의 크기는 컴파일러에 따라 다를 수 있으나 모든 주소와 포인터는 가리키는 자료형과 상관없이 그 크기가 같다는 것에는 변함이 없다. 주소와 포인터의 크기는 sizeof 연산자로 확인할 수 있다. #include int main(void) { char ch; int in; double db; char *pc = &ch; int *pi = ∈ double *pd = &db; printf("char형 변수의 주소 크기 :%d\n", sizeof(&ch)); printf("int형 변수의 주소 크기 : %d\n", sizeof(&in)); printf.. 2022. 12. 7. 이전 1 다음