2 qq 33515515 qq_33515515 于 2016.02.15 11:13 提问

C语言中二级指针修改数组问题。

数组相当于一级指针,我写了一个二级指针被调用。
结果它总是宕机,求指导,谢谢。图片

3个回答

wangzhiyu1980
wangzhiyu1980   2016.02.15 14:47
已采纳

这段程序编译会报错吧:
cannot convert parameter 1 from 'char (*)[100]' to 'char **'

可以这样 试试看
#include
#include
#include

int getMemBuf(char*& p2)
{
char* tmp = NULL;
tmp = (char*)malloc(100);
strcpy(tmp, "aaabbbccc");

p2 = tmp;
return 0;

}

void main()
{
int i = 0;
char* buf;
getMemBuf(buf);

printf("%s\n", buf);

free (buf);
system("pause");

}

qq_33515515
qq_33515515 你这个就是二级指针改一级指针了,谢谢你。
接近 2 年之前 回复
wangzhiyu1980
wangzhiyu1980 下面的也改一下 *p2 = tmp; getMemBuf(&buf);
接近 2 年之前 回复
wangzhiyu1980
wangzhiyu1980 回复Mage??? : 我在VC下试了是可以的,当然也可把int getMemBuf(char*& p2) 改成int getMemBuf(char** p2)
接近 2 年之前 回复
wangzhiyu1980
wangzhiyu1980 回复Mage??? : 我在VC下试了是可以的,当然也可把int getMemBuf(char*& p2) 改成int getMemBuf(char** p2)
接近 2 年之前 回复
wangzhiyu1980
wangzhiyu1980 回复Mage??? : 我在VC下试了是可以的,当然也可把int getMemBuf(char*& p2) 改成int getMemBuf(char** p2)
接近 2 年之前 回复
qq_33515515
qq_33515515 char *& p2编译不能通过。
接近 2 年之前 回复
91program
91program   Ds   Rxr 2016.02.15 11:17

数组确实是相当于一级指针,但是是常量指针,其值不能被修改。
任何试图修改数组名的操作,会引起程序严重异常。

fk002008
fk002008   2016.02.15 11:29

数组名仅仅是“相当”于指针,而并非真的是指针,只是个常量(一个值为数组首元素地址的常量),所以不能进行++或者--运算。
而常量更是无法取地址的, 你使用的给数组名取地址它代表了数组本身,可不是简单的二级指针

qq_33515515
qq_33515515 回复lambda-fk: 谢谢。
接近 2 年之前 回复
fk002008
fk002008 不是那意思,你如果对数组名取地址,比如int a[3] ,&a是数组本身的地址,和普通变量的地址类似,&a的值是a[0]的地址,但是你如果使用&a+1,这个地址可不是数组第一个元素的,而是数组所在内存块的末尾的下一个地址(将数组看成一个整体变量),所以你用 &数组名去操作数组内部的东西是不可能的,只能使用数组名a 移动来访问更改数组内元素的值
接近 2 年之前 回复
qq_33515515
qq_33515515 那数组就是不能通过被调用函数修改了对吧?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!