标题: C语言问题记录 [打印本页]

作者: heise    时间: 2014-8-18 00:25
标题: C语言问题记录
                        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 **







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1