C 언어 가변 매개 변수, 매개 변수 전달

7673 단어 매개 변수 전달
1. 함수형 참조의 저장
함수형은 함수에 저장되어 창고의 방식에 따라 저장된다
인스턴스:
#include <stdio.h>

void fun(int a0,int a1,int a2, int a3) { int *temp; temp=&a0; int i; for(i=0;i<4;i++){ printf("%d\t",*temp++); } } int main(){ fun(1,2,3,4); getchar(); return 0; }

함수 출력:
1  2  3  4
2. 일반 함수의 정의가 메모리에 저장되는 방식
일반적인 변수가 정의된 후, 같은 변수 유형은 인접한 메모리에 저장된다
예:
#include <stdio.h>

int main() { int a0=1; char c0='a'; double d0=1.1; char c1='b'; double d1=2.2; int a1=2;
  int a2=3;
int *pint = &a0; char *pch = &c0; double *pd = &d0;
 printf("%p:%d
", pint, *pint); pint++; printf("%p:%d
", pint, *pint); pint++; printf("%p:%d\t%p
", pint, *pint); printf("%p:%c
", pch, *pch); pch++; printf("%p:%c
", pch, *pch); printf("%p:%.2f
", pd, *pd); pd++; printf("%p:%.2f
", pd, *pd); }

출력:
0xbf944c54:10xbf944c58:20xbf944c5c:30xbf944c6e:a0xbf944c6f:b0xbf944c40:1.100xbf944c48:2.20
**이 결론은 단지 나 자신의 컴파일러에 대한 결과일 뿐이다. 구체적으로는 다른 컴파일러의 출력에 대해 다를 수 있고 변수를 사용하지 않았다면 컴파일러가 그것을 버릴 수도 있다(자신의 추측일 뿐이다. 한동안 을 연구할 때 이 문제를 연구할 것이다).
3, C 언어가 우리에게 준 가변형 참바list
헤더 파일 stdarg.h
다음과 같은 네 개의 매크로가 정의되어 있습니다.
1. va_list
stdarg에서.h에서 정의: typedef char * valist;
2. void va_start(va_list ap,last);
이것은 첫 번째 호출된 매크로입니다.last는 가변 매개 변수의 이전 확실한 매개 변수입니다.따라서 가변 매개 변수의 함수만 허용되지 않습니다. 예를 들어fun (...)비합법적입니다.
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v)//첫 번째 선택적 매개변수 주소
3. void va_arg(va_list ap, type);
현재 파라미터를 되돌려주고 ap가 다음 파라미터를 가리키도록 합니다. type은 명확한 형식 이름입니다. 가져오는 형식이 아닙니다.
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t))//다음 매개변수 주소
4. void va_end(va_list ap);
유바start는 반드시vaend, ap 방출 작용
#define va_end (ap) (ap = (va list) 0)//포인터를 무효로 설정
4. void va_copy(va_list dest, va_list src);
매번 va 호출copy 때도 바end 호출.
예:
#include <stdio.h> #include <stdarg.h>



void fun(int a,...){ va_list ap; va_start(ap, a); int i; for(i=0; i<a; i++){ printf("%d\t",va_arg(ap,int)); } putchar('
'); va_end(ap); } int main(){ fun(4,1,2,3,4); printf("--------------------------------
"); fun(4,1,2,"ab","cd"); return 0; }

 
출력:
1 2 3 4 --------------------------------1 2 134514184 134514181

좋은 웹페이지 즐겨찾기