关于指针的一些问题

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在对其赋值。

猜你喜欢

转载自www.cnblogs.com/shellingfordly/p/11252051.html