함수포인터, void형 포인터, main함수를 통한 인자전달

int (*fPtr1) (int);
void (*fPtr2) (int, int);

1번째는 fPtr1이라는
포인터가 int형 인자를 한개받고 int형 반환을 하는 포인터를 가리킬 수 있다.
2번째는 fPtr2라는 포인터가 int형
인자를 두개 받고 void형 반환을 하는 포인터를 가리킬 수 있다.

void SelFunction(int a)
{
 
void (*fPtr) (void);
  if(s==1)
     fPtr=Add; //Add함수를 fPtr에 연결
 
else
      fPtr=Min; //Min함수를 fPtr에 연결
  fPtr();  //함수 포인터 호출...
}

char
c = 'a';
int n=10;

void *vp;  //void 포인터 선언
vp=&c;
vp=&n;

void형 포인터는 일을 하지 못한다.
대신 모든 값을 저장할 수 있다.
명시적 형 변환을 통해 사용한다.

int
n=10;
void *vp=&n;  //void형 포인터 선언 및 초기화
*vp=20;  //ERROR
vp++; 
//ERROR
void형 포인터는 포인터 자체에 대한 정보가 없기 때문에 값을 저장하는 것 외에는 아무것도 하지 못한다.

int
n=10;
void *vp=&n;  //void 포인터 선언 및 초기화
*((int*)vp)=20;
void
형 포인터가 가리키는 값을 20으로 변경하기 위해 int형 포인터로 형변환한다. 이렇게 하면 에러가 발생하지 않는다.

main
함수를 통한인자 전달
dos시절에.. 또는 리눅스 커널에서 많이 쓰는 명령어형식...
int main(int argc,
char **argv)
압축을 풀 때는
lhz x game.zip
압축파일에 따라 다르지만 뭐 이런식으로...
명령을 넣었던 것 같다.
리눅스는 tar -zxvf game.tar.gz

int argc를 통해서
문자열의 갯수가 전달된다.
lhz, x, game.zip 세개가 전달되었으니
문자열을 담을 char형 포인터배열
char*arr[3];을 형성해서,
arr[0],arr[1],arr[2] 세개가 문자열배열로 구성되어 main함수로
전달된다.

main함수의 선언을 이렇게 해도 똑같다.
int main(int argc, char *argv[])

//
함수 이름 자체도포인터다.

Leave a Reply

Your email address will not be published. Required fields are marked *

 characters available

17 − = 15