#include
void gb(char **buf)
{
*buf[0] = 'a'; //这里down掉
}
int main()
{
char b[] = { "aaaasssddddasd" };
printf("%s\n", b);
gb(&b);
system("pause");
return 0;
}
b是常量指针,不能当做左值这个我知道,这个程序里的被调函数也没有修改b的值。
为什么在 *buf[0] = 'a'; 这里会编译不过去呢?
这是我画的内存模型图 老哥们看看有没有问题(O_O)?
这是我画的内存模型图 老哥们看看哪里出了问题(O_O)?
首先这个b并不是常量指针,char *b = "aaaasssddddasd";这个才是常量指针,试图修改任何一个字符都会出现异常崩溃
其次这样的传参方式在很多编译器里过不去(例如VS)
*buf[0] = 'a';改成(*buf)[0] = 'a';试试
如图,没交换值,只通过了编译
变量b被编译器编译在只读数据段。不能修改内容