1: 请问下面的代码有什么问题?#include
#include
void p_malloc( void *p, int size)
{
p = malloc(size);
}
int main ( void )
{
char * p = NULL;
p_malloc(p,100);
//使用p
...
}
1:void *, void**,void **...:都是一种变量类型;
2:在调用函数时,被调用函数的形参是主调函数的调用该函数时形参列表的拷贝(简单的赋值),且被调用函数的形参都是临时变量,作用域在本函数。
fun(...) p_malloc(void *C, intD)
{ {
void *A=NULL;
int B = 100; ===>
p_malloc(A,B);
} }
C = NULL; D =5;
3:主调函数若想通过子函数操作一个变量A,须将A的地址传递给被调函数,被调函数通过该变量的地址来操作该变量,否则无法操作。
void p_malloc( void **p, intsize)
{
*p = malloc(size);
}
int main ( void)
{
char * p = NULL;
p_malloc( (void**)&p,100);
//使用p
...
}
char *p; 在被调函数中需要通过p的地址(&p: char**)来操作p;
p_mallocr(p,5);只是将p的值赋给了被调函数,被调用函数操作的是自己的临时变量无法操作p;
总结:
1:实参与形参的作用域为各种所在的函数;实参传递到形参,只是同类型变量进行一对一的数值拷贝。
2:相互独立的函数,拥有各自独立的私有数据;在本函数没有退出前(它所拥有的私有数据有效),其他的函数只能通过地址(指针)才能写本函数的私有数据空间。
char 变量的指针变量:char *
char*变量的指针变量:char * *
void*变量的指针变量:void **
|