回 帖 发 新 帖 刷新版面

主题:指针运算符与地址运算符



    scanf("%d",&a);
    scanf("%d",&*p);
    scanf("%d",p),
这三个语句一样,谁能给展开讲讲为什么一样呀??注意是展开讲
刚刚学指针,想打好基础。
谢谢!!!

回复列表 (共4个回复)

沙发

这三个语句你没带上前面的声明形式,怎么就一样了?
简单地来说,&在不是函数的形参的位置使用的时候表示取地址运算,而*是指针的取值运算
那么对于如下的声明:
int a=3;
int *p=&a;
我们有,a==*p==*(&a)==3
p==&a==&(*p)

板凳

若有声明:
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 楼

先说明一下,如果你没有举出合适的例子,这个叙述本身就是错的,
加入吧,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 楼


好晕呀
不过谢了 
你有好多错字吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册