当前位置: 首页 > news >正文

c语言笔记 结构体指针运用

        

目录

1.结构体指针与结构体变量

2.结构体指针与结构体数组


c语言其实有时候基本知识还是一样只是说换了一个名称但是所表示的含义是一样的。

        结构体指针是指针的一种类型,可以指向结构体变量或者结构体数组,下面我们来探究一下结构体指针跟结构体变量的结合,以及结构体指针与结构体数组的结合。

1.结构体指针与结构体变量

        下面Jack是结构体变量,p是结构体指针,以下的写法是等价的:所表示的是同一种事情,但是不同的表示方式。

Jack.number

p->number

(*p).number

p[0].number

等价

Jack.weight

p->weight

(*p).weight

p[0].weight

等价

Jack.x.a

p->x.a

(*p).x.a

p[0].x.a

等价

Jack.n[i]

p->n[i]

(*p).n[i]

p[0].n[i]

等价

注意:

1.n是结构体里面的数组名,x是结构体内的结构体;

2.如果说在结构体内有数组,那么数组名就是表示首元素地址,我们可以定义一个整型的指针q去获取到它的地址,在通过指针的偏移去初始化数组的值,也可以定义个结构体指针去偏移指针来赋值;

详细代码如下:

#include<stdio.h>
struct student  //结构体标签student
{int number;int age;float weight;float high;int n[50];  struct{int a;int b;    }x;                  
}Jack,Make;//这里初始化了两个结构体变量
int main()
{struct student *p = &Jack;//定义一个指针指向结构体变量   p = &Jack;Jack.number    <==> p->number    <==>    (*p).number   <==> p[0].numberJack.weight    <==> p->weight    <==>    (*p).weight   <==> p[0].weightJack.x.a       <==> p->x.a       <==>    (*p).x.a      <==> p[0].x.aJack.n[i]      <==> p->n[i]      <==>    (*p).n[i]     <==> p[0].n[i]
}

2.结构体指针与结构体数组

        结构体指针指向一个结构体数组,表示指向该结构体数组的首元素地址,本质上的表示方式跟普通指针指向数组的表示方式差不多,但是语法不同,比如各自的格式是不一样的,但是所表达的内容是一样。

        下面四种写法单独罗列出来,结构体指针的偏移就是以自己类型的字节为单位进行偏移。

可以类似对比一级指针与一维数组的互相转换。结构体指针与结构体数组在表达成员的初始化值的时候可以互相转换,可以说就是换了一个名字。

N[0].number

(p+0)->number

(*(p+0)).number

p[0].number

等价

N[1].weight

(p+1)->weight

(*(p+1)).weight

p[1].weight

等价

N[2]x.a

(p=2)->x.a

(*(p+2)).x.a

p[2].x.a

等价

N[3].n[i]

(p+3)->n[i]

(*(p+3)).n[i]

p[3].n[i]

等价

详细代码如下:


#include<stdio.h>
struct student  //结构体标签student
{int number;int age;float weight;float high;int n[50];  struct{int a;int b;    }x;                  
}Jack,Make;//这里初始化了两个结构体变量
int main()
{struct sutdent N[4];//定义了4个学生,每个学生的信息都是不一样的struct student *p = N//定义一个指针指向结构体变量   p = &Jack;表示第一个结构体变量   数组内的结构体变量是没有名称的
N[0].number   <==> (p+0)->number   <==>    (*(p+0)).number    <==> p[0].number
N[1].weight   <==> (p+1)->weight   <==>    (*(p+1)).weight    <==> p[1].weight
N[2]x.a       <==> (p=2)->x.a      <==>    (*(p+2)).x.a       <==> p[2].x.a
N[3].n[i]     <==> (p+3)->n[i]     <==>    (*(p+3)).n[i]      <==> p[3].n[i]
}   N[3].n[i]这个表示的是结构体数组里面的成员是数组的元素值

        结构体变量本身的初始化是没有用到地址的,是(结构体名.成员)。如果说我们获取到结构体变量的地址。那么我们需要解引用来得到结构体变量,解引用后再使用结构体变量的赋值方式。

总结

  1. 结构体指针与结构体变量的用法就是,p->变量成员
  2. 结构体指针与结构体数组的用法,互相转换,也可以用->加以单位进行偏移
  3. 结构体这块知识模块的难点可能是在名称的表示上面,我们要多熟悉这些名称和语法,多练就能学会的。
  4. 结构体指针指向结构体变量,需要取地址,若要访问结构体变量的成员就可以使用→;

  5. 结构体指针指向结构体数组,结构体数组名代表首元素地址,我们需要偏移指针到我们要修改的那一个结构体变量,因为偏移后的指针依旧是一个地址所以我们需要解引用来获取数值,再按照结构体变量访问成员的方式去修改。c语言的很多语法都是不同的名称有着相同的含义。


http://www.mrgr.cn/news/95205.html

相关文章:

  • Python散点图(Scatter Plot):高阶分析、散点图矩阵、三维散点图及综合应用
  • 【算法day15】最接近的三数之和
  • git tag常用操作
  • Umi从零搭建Ant Design Pro项目(2)
  • An Introduction to Stable Diffusion
  • 1-1 MATLAB深度极限学习机
  • C++ 头文件说明
  • 【c++】【STL】unordered_set 底层实现(简略版)
  • MATLAB深度极限学习机
  • 识别并脱敏上传到deepseek/chatgpt的文本文件中的护照信息
  • 同等学力申硕-计算机专业-数学基础-历年真题和答案解析
  • 鬼泣:动作系统3
  • 【ESP32】虚拟机Ubuntu20.04下ESP32环境搭建
  • C++特性——RAII、智能指针
  • C语言每日一练——day_12(最后一天)
  • 算法刷题记录——专题目录汇总
  • Python(3)掌握Python循环:从基础到实战的完整指南
  • Wi-Fi NAN 架构(Wi-Fi Aware Specification v4.0,第2章:2.3~2.6)
  • 在VMware上部署【Ubuntu】
  • iwebsec-updatexml报错注入