首页 > 其他 > 详细

关于指针的一些问题

时间:2019-07-26 18:39:20      阅读:64      评论:0      收藏:0      [点我收藏+]
int a,*p=&a;
    printf("&a---%d\np---%d\n&p---%d\n*&p---%d\n&*p---%d\n*p---%d",&a,p,&p,*&p,&*p,*p);
    if(a)printf("aa"); 
  /*输出结果

    &a---6356788
    p---6356788
    &p---6356784
    *&p---6356788
    &*p---6356788
    *p---3022848aa请按任意键继续. . .

    */

  • &a:表示a的地址
  • p:表示a的地址
  • &*p/*&p:*p表示a,&*p=&a表示a的地址,可能是由于&和*的优先级一样,所以&*p和*&p都是取得a的地址
  • &p:指针p自己的地址
  • *p/a:a的值,无值时似乎是随机地址
  • if(a):无值时为真
#include<stdio.h>
struct st
{
    int num;
    int s;
};
int main(void)
{
        int d=4;
        struct st a,*p=&a;
        //*p=d; //报错
        p->num=d; //ok 
        printf("%d",*p); //4
}        

我以为*p=&a;和*p指向数组一样,可以用*p直接对第一个成员进行赋值,但是我发现并不可以;

我绝对可能是数据类型的原因,数组时因为每一个元素都时int类型,所以*p指向int数组类型的第一个元素也是int类型,可以直接赋值;

我的理解:而结构体中,*p指向结构体类型数据a,虽然地址是指向第一个成员,但是a是结构体类型,num才是int类型,所以要用p->num获取num在对其赋值。

关于指针的一些问题

原文:https://www.cnblogs.com/shellingfordly/p/11252051.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!