Curz酥 2022-08-22 00:28 采纳率: 90.9%
浏览 326
已结题

C语言结构体指针和结构体变量有什么区别?

它们的区别,可以详细地解释一下吗,最好从各个方面详细解释下。

  • 写回答

6条回答 默认 最新

  • qzjhjxj 2022-08-22 09:37
    关注

    1.内存空间上面的差别
    假设有如下代码:
    typedef struct Stu
    {
    int age;
    }stu;
    此时定义一个结构体指针 stu * p; 一个结构体变量 stu q;
    结构体指针p是指向一个结构体的,这个结构体没有名字,它指向的是一个结构体空间的首地址;如果需要使用这个结构体就必须malloc一个空间出来或者将一个具有空间的结构体的首地址赋予它;如果你不给它分配空间代表这是一个野指针,访问的时候会出错;
    结构体变量q,在定义变量的时候,编译器就自动给变量分配了合适的储存空间;
    2.访问上的差别
    结构体指针访问成员变量的操作符是 ‘->’,结构体变量访问成员变量的操作符是‘.’
    并且(*p).age <=> p->age;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 吉士先生 Java领域新星创作者 2022-08-22 04:00
    关注

    结构体指针的属性是 指针。
    结构体的变量的属性是变量。
    指针的作用是指向地址,可以指向数组 地址 等等。
    二变量的作用就单纯是一个变量,可以提供地址。

    评论
  • 庚昀◟ 后端领域优质创作者 2022-08-22 09:37
    关注
    
    typedef struct LinkList
    {
        char data;
        LinkList* lchild;
        LinkList* rchild;
    }BiNode,*BiTree;
    

    想必你问的是数据结构里的有关链的问题,给出以下解释:
    上面的代码中,BiNode和BiTree都是结构体变量,只不过BiNode是结构体变量,而另外一个是结构体指针变量;指针变量指向的结构体变量的地址,当你调用函数修改一个结构体变量的内容时,可以以此作为返回值类型。结构体变量就是这个结构体里面还有很多属性,按照上面的代码来说就是含有字符型的data和结构体指针类型的right和left(用于连接其他结构体变量)

    评论
  • .魚肉 2022-08-22 01:52
    关注

    结构体变量就是一个变量,把他看成和int,char一样的就行,只不过它的字节数是我们自己可以定义的,不同的字节区间表示了不同的数据类型,比如前四个字节表示int型,紧接着1个字节表示char类型。结构体变量的特点就是可以使用将相同属性的变量整合在一起。
    比如描述一个人可以用一个包含姓名、性别、年龄……等的字段来描述,然而人有有很多,这也就有了结构体数组一说。

    结构体指针就是可以指向结构体变量的指针,所谓指针类型,无非就是告诉指针每次++或--需要移动几个字节(这当中又会涉及到字节对齐的知识,简单来说就是为了方便计算机对变量的管理和使用,计算机会自动为结构体变量增加字节数,比如:
    struct man {
    char name[4];
    char gender ;
    int age;
    }man,*p;
    直接计算就得到这个man结构体的字节数是9;但是实际测得为12,如果p指向内存空间1004,则p++后p指向1016

    img


    当字节数不满4的倍数时,系统会自动追加字节

    ),
    这并不会影响计算机读取这个数,但是会大大方便程序运行,
    结构体指针的特殊之处还有就是,它可以指向结构体内部的成员,访问到指定成员的值,用法如 p->name

    评论
  • 安河桥畔 2022-08-22 01:00
    关注

    以学生类为例,

    struct student 
    { int age;
    int num;
    char name[10];
    };
    struct student s1;//这里给出的是未使用typedef重命名的写法,方便理解
    struct student *ps = &s1;
    

    这里s1就是结构体变量,ps则是指向s1这个结构体变量的指针。
    定义方式不同,如上代码所示。
    从访问成员的方式来说,变量用.符号,指针用->符号,结构体变量访问:s1.age,结构体指针访问:s1->age。
    从大小来说,结构体变量大小与成员有关,要考虑内存对齐,这里不展开,而指针大小再32位操作系统下固定4字节。

    评论
  • 雨下,听风 2022-08-22 10:03
    关注
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 8月30日
  • 已采纳回答 8月22日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 I350 Gigabit Network
  • ¥15 关于#abap#的问题,请各位专家解答!
  • ¥20 内网通过公网访问外网问题
  • ¥20 谁有这个东西 继续教育的
  • ¥15 怎么使请求通过cors
  • ¥15 WDM 驱动ACPI 相关疑问
  • ¥15 prism 跨窗体共享数据绑定 wpf
  • ¥15 hdl designer突然用不了系统的moduleware组件,请问有人遇到或者怎么解决吗?
  • ¥15 0基础计算机毕设,应该从哪开始?
  • ¥60 使用DKT40脑图划分ROI区域