函数中返回指针及关键字static:
int* func(); //函数声明,或叫函数原型。
int main(){
int* n = func();
printf("n = %u\n", n);
return 0;
}
int* func(){
int n1 = 100; //函数结束时,n1被回收
//static int n1; //加上static关键字,函数结束时不会被回收
return &n1; //返回指针
}
上面结果运行时会报错,为什么?怎么解决?
- 原因:因为函数中的变量是相互独立的,即使变量名称一样。因此func函数结束时,变量n1被回收。
- 解决:若不想让变量n1被回收,可在变量n1前面加上关键字static即可
函数名返回多个变量,就像:scanf("%d%d", &d1, &d2);
void mfunc(int** a, int** b){
int x = 100;
int y = 200;
*a = &x; //返回指针
*b = &y;
}
int main(){
int* a = NULL; //由stdio.h中定义 #define NULL 0;
int* b = NULL;
mfunc(&a, &b); //因mfunc函数形参是二级指针,因此需要传入一级指针
//如果a、b不为NULL,则说明mfunc函数修改成功
if(a != NULL && b != NULL){ //空指针
printf("a = %u\t b = %u\n", a, b);
}
return 0;
}
上面打印出:a = 6421980 b = 6421976 说明返回多个变量成功。类似scanf函数返回多个变量也是一样。