2015년 7월 13일 월요일

20150714 void형 포인터 / main함수를 통한 인자의 전달

함수의 원형을 모를때 강제로 에러를 일으킨다!
int a = printf; // 타입이 맞지 않기 때문에 에러가 발생

컴파일러는 아래와 같이 설명한다!
main.c(7) : warning C4047: 'initializing' : 'int' differs in levels of indirection from
 'int (__cdecl *)(const char *, ...)'



함수를 반환하는 함수를 호출하는 함수포인터
운영체제에 많이 씀(복잡한것?)

★void형 포인터(type형이 존재하지 않는 포인터)
형이 존재 하지 않기에 어떤 형이라도 가리킬수있다!

  • 단점은 아무런 포인터 연산도 하지 못한다. 값의 변경이나 참조도 불가능!
  • 읽거나 쓰기 금지!
void형 포인터는 메모리의 저장공간을 지정하지 않기때문에
*(int *)vp=100; // 왼쪽처럼 type casting을 사용하면 값의 변경이 가능(쓰기)
iNum2=*(int *)vp; // 왼쪽처럼 type casting을 사용하면 값의 참조 가능(읽기)

★프로그램 실행시 main함수로 전달할 인자를 열거할 수(결정할 수) 있으며,
main함수 역시 이러한 인자를 전달 받을수 있도록 제한된 형태의 매개변수 선언이 가능
예제(또 다른예로서 도스창에서 notepad를 열때)
#include <stdio.h>
int main(int argc, char *argv[]) /* argc는 실행파일의 이름을 가리킨다!
argv[] 실행파일의 실행직전에 크기 결정 */
{
int i=0;
printf("전달된 문자열의 수 : %d\n", argc); // 실행파일의 이름도 문자열로 인식

for(i=0; i<argc; i++) // 지정된 문자열의 크기만큼 출력
{
printf("%d번째 문자열 : %s\n", i+1, argv[i]);
}
return 0;
}

댓글 없음:

댓글 쓰기