|
![]() | 作者: slatfish [slatfish]
![]() |
登录 |
我们都知道,在调用函数时,如果实参是地址值时,形参也必须是地址值,他们之间的传递是按照地址传递的。 在下的问题是: swap(int *p1,int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp; printf("%d %d %d %d\n",p1,p2,&p1,&p2); } main() {int a,b; int *pointer_1,*pointe_2; scanf("%d %d",&a,&b); pointer_1=&a;pointer_2=&b; if(a<b) swap(pointer_1,pointer_2);printf("%d %d %d %d %d %d %d %d\n",a,b,pointer_1,pointer_2,&pointer-1,&pointer_2,&a,&b); } 输入的值是1,2 最终的结果是: -48 -46 -52 -50 2,1,-48,-46,-44,-42,-48,-46 在下不明白的是,在pointer-1把自己的地址传给p1时,pointer_1的地址值是-44,p1的值应该是-44,而实际上是传递的是a的地址值,所以p1的值-48,得到的结果和理论值是不一样的。问:它们传递应该是地址啊,而实际不是的。请问这是为什么?? |
地主 发表时间: 02/10 14:06 |
![]() | 回复: aozhi [aozhi] ![]() |
登录 |
swap(int *p1,int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp; printf("%d %d %d %d\n",*p1,*p2,*p1,*p2); //要注意你输出的是一个指针的地址所存放的值,就是*p,带那个*啊, } main() {int a,b; int *pointer_1,*pointer_2; scanf("%d %d",&a,&b); pointer_1=&a; pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); printf("%d %d %d %d %d %d %d %d\n",a,b,*pointer_1,*pointer_2,*pointer_1,*pointer_2,*&a,*&b); getch(); } [此贴被 傲之骨(aozhi) 在 11月18日17时26分 编辑过] [此贴被 傲之骨(aozhi) 在 11月19日13时30分 编辑过] |
B1层 发表时间: 11/18 17:19 |
![]() | 回复: lzg2001 [lzg2001] ![]() |
登录 |
地址传值时函数是不为形参分配空间的,P1的值实际就是A呀. |
B2层 发表时间: 11/24 11:29 |
![]() | 回复: ceo_8008 [ceo_8008] ![]() |
登录 |
注意一下p和&p所表示的含义不一样 |
B3层 发表时间: 11/24 12:54 |
![]() | 回复: zhoen889 [zhoen889] ![]() |
登录 |
getch();放在最后有什么用处,是用来清屏吗? 多谢!! |
B4层 发表时间: 11/29 11:13 |
![]() | 回复: zhoen889 [zhoen889] ![]() |
登录 |
#include<iostream.h> #include<iomanip.h> void swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp; cout<<*p1<<setw(3)<<*p2<<endl; } 如果想要求它们的地址,请把*去掉,因为指针本身就是地址!! void main() { int a,b; int *pointer_1; int *pointer_2; cout<<"Please input a,b:"; cin>>a>>b; pointer_1=&a; pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); cout<<a<<setw(3)<<b<<setw(3)<<*pointer_1<<setw(3)<<*pointer_2<<endl; } [此贴被 zhoen889(zhoen889) 在 11月29日11时56分 编辑过] |
B5层 发表时间: 11/29 11:24 |
![]() | 回复: ziaichen [ziaichen] ![]() |
登录 |
指针的概念就是:指内存储单元的地址。 int *p是定义一个指针变量,代表p可以存放一个int型变量的地址; *p=a 这里*p指引用p所指的对象,并将a的植赋予这个对象; 因此你想一想:&p是什么意思?指针需要再取地址吗? 在你的程序中printf("%d %d %d %d\n",p1,p2,&p1,&p2);又是什么意思???? 当然你的程序结果和你预想的不一致了。 [此贴被 ziaichen(ziaichen) 在 11月30日21时32分 编辑过] |
B6层 发表时间: 11/30 11:14 |
![]() | 回复: jiangweng [jiangweng] ![]() |
登录 |
同意~以上看法 |
B7层 发表时间: 11/30 13:55 |
![]() | 回复: realpope [realpope] ![]() |
登录 |
我也同意 |
B8层 发表时间: 11/30 14:44 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号