关于c语言函数返回值问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 16:11:21
函数定义如下
char * ReadDisk(int address,char * d,int read_size)
{
省略一些繁琐代码;
d=d+weizhi;
return d;
}
调用时
char * a;
char * b;
a=(char *)malloc(BS*K);//申请内存空间
b=ReadDisk(address,a,BS*K);
为什么这时候a和b的值不一样呢?请教高手指点!

哦我知道你的意思了,
当然不一样啊,b=ReadDisk(address,a,BS*K);之后,a是不会变的,因为参数是传值方式,要变的话要使用传址方式,应为:
char * ReadDisk(int address,char ** pd,int read_size)
{
省略一些繁琐代码;
*pd=*pd+weizhi;
return *pd;
}

因为内存空间已经分配了,所以B不能申请A所在的空间,而是得到紧接着A的下一个空间.

应该是ReadDisk函数有错误,要想b和a值一样,不就把a的地址赋给b就行了嘛!

在刚进入函数时 d 是等于 a的
并且如果在函数中没有像 d=d+weizhi;地代码,d 始终是等于 a 的最后b也会等于a,
只是你的代码中出现了d=d+weizhi等一些代码,就使 d的指针指向了a向后移weizhi的位置,如果weizhi大于BS*K,b还会出现溢出的现象