1.要想通过无返回值的函数来修改实参的值,必须传递地址
void f(int* p)
{
*p = 100;
}
int main()
{
int a = 9;
f(&a);//无论是什么类型的变量,此处必须传递地址才可通过函数修改其值。表示p = &a,那么*p就等价于a
printf("a = %d\n", a);
return 0;
}
2.跨函数使用内存
题目:下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是
A main()
{
int* p;
fun(p); //此处没传递p的地址,所以肯定错误
...
}
int fun(int* q)
{
int s;
q = &s;
}
B main()
{
int* p;
fun(&p);
...
}
int fun(int** q)
{
int s;
*q = &s;
}
//看似正确,其实错误。p的地址传给了q,则*q就等价于p,p指向了s,但是变量s只在fun函数内部有效,fun函数执行完后,s这块内存就被释放,不是一个合法的整型单元
C main()
{
int* p;
fun(&p);
...
}
int fun(int** q)
{
*q = (int*)malloc(sizeof(int));//正确,malloc分配的内存必须由free进行主动释放
}
D main()
{
int* p;
fun(p);//没加取地址,直接判断错误
...
}
int fun(int* q)
{
q = (int*)malloc(sizeof(int));
}