C语言指向结构体的指针

#include<stdio.h>
struct node{
int num;
char name[10];
}a;
int main(){
struct node *p
p = &a;
}
我知道p表示的是结构体a中num的地址,好奇地想问一下*p表示什么呢,比如printf("%d", *p),输出的那个数字表示什么呢?


    C语言中的结构体
    在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。

    定义与声明
    结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。

    结构体成员的引用

    有两种方式,英文的句点 . ,一个减号加一个大于号 ->。

    当结构体是一个指针时要引用结构体的成员就用-> 而如果不是指针就用.。

    如:
    struct msg_st {
          int a;
    };
    struct msg_st  msg;
    struct msg_st *ms;
    msg.a = 10;
    ms->a = 20;




温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-16
只能说p指向了a,即p的值就是a的地址,通常&a就是a中第一成员的地址:
(int)&a == (int)(&a.num)
但两者有重要区别:值相同但类型不同
&a的类型为:struct node*
&a.num的类型为:int*
struct node b = *p; //即*p结果是一个struct node对象,不是int型也就不能用%d来输出
第2个回答  2019-09-16
如果你按%d输出,那么是把结构体开始的四个字节当作一个整数来解释
如果结构体定义第一个成员恰好就是一个整数,例如
struct s{int i;}
那它就是i的值,如果不是这样,而是其他类型的成员,比如
struct t{char s[10];}
那么会出现一些你不能理解的数字,但它仍然是个数字,任何一段4字节内存,你都可以当作一个整数来解释,他就是一个数,只不过当他原本并不是整数时,你错解了它的含义,而且你不知道它是个啥。
相似回答