主题:指针运算符与地址运算符
cyp2010
[专家分:10] 发布于 2010-05-18 22:35:00
scanf("%d",&a);
scanf("%d",&*p);
scanf("%d",p),
这三个语句一样,谁能给展开讲讲为什么一样呀??注意是展开讲
刚刚学指针,想打好基础。
谢谢!!!
回复列表 (共4个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-05-18 22:44:00
这三个语句你没带上前面的声明形式,怎么就一样了?
简单地来说,&在不是函数的形参的位置使用的时候表示取地址运算,而*是指针的取值运算
那么对于如下的声明:
int a=3;
int *p=&a;
我们有,a==*p==*(&a)==3
p==&a==&(*p)
板凳
HCYJ [专家分:0] 发布于 2010-05-19 10:26:00
若有声明:
int a=3;
int *p=&a;
则说明指针p指向变量a,指针p里面放的是变量a的地址,就像变量a里面放的是数字3一样。
所以有p==&a==&(*p);
&(*p)是说:取(*p)的地址,因为p指向a,*p==3,也就是&(*p)==&3,因为3放在变量a中,所以取3的地址就是取a的地址。
说的我的头就有点晕了。。。
3 楼
Jasperu [专家分:80] 发布于 2010-05-19 11:26:00
先说明一下,如果你没有举出合适的例子,这个叙述本身就是错的,
加入吧,int a;/* 定义了一个变量*/
int *b/* 定义了一个指针变量,在这里的这个*,表示标记这个p为一个指针变量*/
b=&a;/* b作为一个指针,用&(取址运算符)获得a在内存中的存储位置,*/
那么现在了你看a=*b=*(&a)因为现在这个*表示的不再是标记为指针了。而成了取值预算服了,
也就是说,现在这个*表示,获得指针b的值,(注意与地址)有区别。
你要是想输出这个p指针的地址,用八进制的形式,如printf("%o",p)就可以看到这个p的存储地址
了(数字)
现在是输入的话,因为这个scanf输入时必须要获得变量的地址,所以现在这个p为指针,已经获得了a的地址了。所以可以用scanf("%d",p);
而你看,这个*p表示获得了这个a的值,那么&*p其实就是相当于&a,,,
你自己理解一下
4 楼
cyp2010 [专家分:10] 发布于 2010-05-19 17:16:00
好晕呀
不过谢了
你有好多错字吧
我来回复