请高手帮帮忙,下面这段代码哪个地方出错了,总是运行出错。通过函数怎么无法改变指针值?

[复制链接]
查看11 | 回复5 | 2011-9-15 10:26:05 | 显示全部楼层 |阅读模式
因为形参(x)与实参(*a)是通过值传递的形式传参的,即把int *x指针复制给int *a指针,fun(int*a)函数操作是针对int *a指针的,虽然int*x和int*a并不是同一个指针(指针地址不同),但是此时他们指向的对象是相同的(指针内容相同),但在函数中,int*a又被赋予了不同的指向(指向b),此时int*x与int*a不仅指针的地址不同,而且指针的的内容也不相同(int*x的内容没声明,而int*a的内容为b的地址),所以在主函数中,cout<<*x时出错,因为int *x指针并没有声明内容,不知道它指向那个数据,所以才出错。...
回复

使用道具 举报

千问 | 2011-9-15 10:26:05 | 显示全部楼层
修改如下:void fun(int *&a) { int b=3; a=&b; } 要想改变指针,要么使用 ** ,要么使用*&,因为函数都是值传递的,你那样是改变不了指针a的。...
回复

使用道具 举报

千问 | 2011-9-15 10:26:05 | 显示全部楼层
参考程序如下:#includevoid fun(int **a) {int b=3; *a=&b; }int main(int argc, char* argv[]){int *x; fun(&x); std::cout<<*x<<std::endl;return 0;}...
回复

使用道具 举报

千问 | 2011-9-15 10:26:05 | 显示全部楼层
b是在栈中分配的,将它的地址赋值给外部指针,函数退出后数据是不可靠的另外fun(x)将x指针的值传递给了临时指针a,然后改变了a指针的内容,但x指针是不会改变的可以这样void fun(int ** a){static int b;*a=&b;}func(&x);...
回复

使用道具 举报

千问 | 2011-9-15 10:26:05 | 显示全部楼层
#include void fun(int *a) { int b=3; *a=b; } void main() { int *x; fun(x); std::cout<<*x;}...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行