找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2549|回复: 0
收起左侧

C语言问题记录

[复制链接]
ID:60266 发表于 2014-8-18 00:25 | 显示全部楼层 |阅读模式
                        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 **


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表