论坛: 编程破解 标题: 有关c语言的指针问题?? 复制本贴地址    
作者: 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号