C语言高手请进
就是关于C的“值传递”的方式不太理解请高手们指导。比如下面的程序:
swap(int a,int b)
{int temp;
temp=a;
a=b;
b=temp;}
main()
{int i=3,j=5;
swap(i,j);
printf("i=%d,j=%d",i,j);
}
运行后i和j的值换不了,这是为什么???::08:: ::08:: ::08:: I 和J的值要换的话应该把交换函数改成swap(int &a,int &b)
这样就是取地址了。区地址才能把原来的数改变,而“值传递”只是把值赋予目标变量而已,本身并没有改变。所以也就无法得到交换结果了
不知道我说的合不合理::21:: 同意楼上的观点。
应该是正解吧。。。。。 那怕是C++才可以吧::07:: ::08:: ::21:: 我用的是win TC啊。一样可以的 好像swap函数中无返回值::42:: 根据楼主的代码,在主函数中输出则不调换,但在swap函数中输出则调换 楼上说的是呀那要怎么办呢?::08:: ::08:: ::08:: ::08:: 你多看一下指针那一节吧,里面讲了很多的,比较详细了
回复 1# 的帖子
对于搂主的问题,我想可以这样解释,主函数中的i和j分别占用一个内存地址,在调用函数以后的a和b重新分配了另两个内存地址,给ab的内存地址所在位置付值当然不会影响ij 里面的内容啦 我也感觉到了c的精华就在这里了。对地址的操作真的很重要,比如要写驱动的时候在这方面就要了解很多了。 [quote]4楼的:那怕是C++才可以吧 [/quote]
&属于引用,据我所知的确只有C++才支持
不过在C中你可以用指针 就是*
其实引用在本质上也是指针 只不过C++做了限制而已
因为指针在某方面很危险。。。。。。 直接写个
PUSH I
PUSH J
POP I
POP J
就可以了,简单明了
回复 12# 的帖子
12楼的,&是取地址,C可以直接用的,C支持回复 11# 的帖子
用全局变量加return 语句::18:: ::18:: 晕啊,那么简单的还要什么指针啊你的问题就是没有弄清变量的生存其问题
改为
int swap(int a,int b)
{int temp;
temp=a;
a=b;
b=temp;
return a,b;
}
main()
{int i=3,j=5;
swap(i,j);
printf("i=%d,j=%d",i,j);
}
就可以了
因为原函数没有返回值,你输出当然是输出定义的值啊。
有返回值后
变量的值就交换了 楼上的你自己测试了没?不要误导人啊,还是用指针的好::13:: 当然要用指针了,这么精华的东西!!同意17楼鄙视16楼
前面有个老兄用&
这里有点异议
我想在定义时应该用 int swap(int *a,int *b){}
在主函数中声明 int a,b;
而在使用时用 swap(&a,&b)
这样才对吧???
说的不好
大家继续讨论 LZ的问题很简单`````是局部的问题, C++有局部变量和全局变量之分````涉及到栈的问题,,程序在调用一个函数,会把函数的变量PUSH进去```函数返回的时候```栈被清空 ,
如果还不理解请
LZ请看下面分析
swap(int a,int b)
{int temp;
temp=a; //在这个函数里定义的变量 a 和b 在swap作用域内 也就是{和}之间```也就是说
a=b; //变量a b的值在这个函数里确实是交换了```但是函数返回后,,a b又被清空```因
b=temp;} //为作用域变了````所以在main函数里,看不到a b被交换..~! 要想真正的交换a b
main() // 可以使用指针和引用的方法```这里不列举了
{int i=3,j=5;
swap(i,j);
printf("i=%d,j=%d",i,j);
}
页:
[1]
