int a =10;int*i =&a;int**j =&i;printf("%d\n",**j);
8.函数
// 传值调用: 把参数的值复制给函数的形式参数,修改形参不会影响实参// 引用调用: 形参为指向实参地址的指针,可以通过指针修改实参voidchange1(int i){
i =10;}voidchange2(int*i){*i =10;}int i =1;change1(i);printf("%d\n",i);// i == 1change2(&i);printf("%d\n",i);// i == 10/*
可变参数
*/#include<stdarg.h>intadd(int num,...){
va_list valist;int sum =0;va_start(valist,num);for(int i =0; i < num;i++){// 访问所有赋给 valist 的参数int j =va_arg(valist,int);printf("%d\n",j);
sum += j;}va_end(valist);return sum;}/*
函数指针: 指向函数的指针变量
*/voidprintln(char*buffer){printf("%s\n",buffer);}voidsay(void(*p)(char*),char*buffer){p(buffer);}void(*p)(char*)= println;p("hello");say(println,"hello");// typedef 别名typedefvoid(*Fun)(char*);
Fun fun = println;fun("hello");say(fun,"hello");typedefvoid(*Callback)(int);voidtest(Callback callback){callback("suc");callback("fail");}voidcallback(char*msg){printf("%s\n",msg);}test(callback);