C语言结构体与结构体指针的使用

C语言结构体与结构体指针的使用C 语言结构体与结构体指针的使用 tips 最近要好好学习一下数据结构 所以必不可少的就是 c 语言的结构体和结构体指针了 所以就整理一下这些基础知识 c 语言结构体 struct 是由一系列具有相同类型或不同类型的数据构成的数据集合 说的通俗一点就是一个集合 c 语言是一门面向过程的编程语言 而结构体的使用在某些层次上跟面向对象有点异曲同工之处了 下面回归正题 学习一下结构体以及结构体指针的知识 一 结构体变量的定义和初始化 1 首先我们来看一下结构体的定义 struct 结构体名 成员列表

C语言结构体与结构体指针的使用

tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构体和结构体指针了,所以就整理一下这些基础知识

c语言结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合。说的通俗一点就是一个集合。c语言是一门面向过程的编程语言,而结构体的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构体以及结构体指针的知识。


一、结构体变量的定义和初始化

1、首先我们来看一下结构体的定义

 struct 结构体名 { 
     成员列表; };//不要漏掉这里的分号! 
//结构体的定义 struct student { 
     int num; char name[20]; char sex; }; 

在这里我们要区别一下结构体名和变量名,结构体名是一种类型,不能被当成变量名来使用

变量名声明方法:
1)struct 结构体名 结构体变量名;
2)直接在定义结构体的时候添加变量名的声明



//在main()中定义及初始化 struct student st1 = { 
    1001,"wr",'m'}; 
//结构体的定义以及初始化 struct student { 
     int num; char name[20]; char sex; }st2 = { 
     1002,"wr",'m' }; 
//用scanf()方法对结构体变量初始化 struct student st3; scanf("%d %s %c",&st3.num,st3.name,&st3.sex);//对于数组,scanf输入的时候不用"&" 

结构的变量的访问(输出)

printf("%d,%s,%c\n", st1.num, st1.name, st1.sex); 

2.结构体数组的定义及初始化

 struct student sarr[3];//定义结构体数组 //循环初始化 for (int i = 0; i < 3; i++) { 
      scanf("%d %s %c",&sarr[i].num,sarr[i].name,&sarr[i].sex); } //测试输出 for (int i = 0; i < 3; i++) { 
      printf("%d,%s,%c\n", sarr[i].num,sarr[i].name,sarr[i].sex); } 

二、结构体指针的使用

1.结构体指针的定义方法
1)struct 结构体名 *指针;
2)直接在定义结构体的时候添加结构体指针的声明




//在main()方法中定义 struct student *p1;//定义结构体指针 
struct student { 
       int num; char name[20]; char sex; }*p2; 

2.利用结构体指针的访问结构体变量(输出)

结构体指针的访问变量方法
1)p->结构体成员;
2)(*p).结构体成员;




//指针访问 struct student *p;//定义结构体指针 p=&st1; printf("%d %s %c\n",p->num,p->name,p->sex); 
//指针访问 struct student *p;//定义结构体指针 p=&st1; printf("%d %s %c\n", (*p).num, (*p).name, (*p).sex); 

看了上面的基础知识是不是觉得比较简单:),下面让我们来分析一下两个特殊的结构体指针访问方法:)
1)p->num++
2)p++ ->num
来看下面的例子
大家可以先不看注释,猜一下输出的结果:)








#include  
         #include  
         //定义结构体 struct student { 
        int num; char name[20]; char sex; }; int main() { 
        //定义结构体数组 struct student sarr[3] = { 
        1001,"wr1",'m',1003,"wr2",'m',1005,"wr3",'m' }; struct student *p;//定义结构体指针 p = sarr;//数组本身就是地址,不用取地址 int num; num = p->num++;//num=p->num;p->num=p->num+1,优先级->的优先级高于++ printf("num=%d,p->num=%d\n",num,p->num); //p->num上一步已经加一 num = p++->num;//num=p->num,p=p+1 printf("num=%d,p->num=%d\n", num, p->num); return 0; } 

附:c语言常见运算符优先级

优先级 运算符 含义 结合方向
1 [] 数组下标 从左向右
() 圆括号
. 成员选择(对象)
-> 成员选择(指针)
2 负号 从右向左
~ 按位取反
++ 自增
自减
* 取值
& 取地址
! 逻辑非
sizeof 数据类型长度
(类型)强制类型转换 强制类型转换
3 / 从左向右
*
% 取模
4 + 从左向右
5 << 左移 从左向右
>> 右移
6 > 大于 从左向右
>= 大于等于
< 小于
<= 小于等于
7 == 等于 从左向右
!= 不等于

希望大家看了能够有所收获,加油!


tips:每一日你所付出的代价都比前一日高,因为你的生命又消短了一天,所以每一日你都要更积极。今天太宝贵,不应该为酸苦的忧虑和辛涩的悔恨所销蚀,抬起下巴,抓住今天,它不再回来。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207329.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午2:04
下一篇 2026年3月19日 下午2:04


相关推荐

  • windows server2016的docker启动iis镜像,并开启iis服务

    windows server2016的docker启动iis镜像,并开启iis服务由于 net 服务需要搭建在 iis 中 因此需要 iis 的镜像容器 然后再把自己的项目程序部署上去 废话不多说 首先 pull 微软的 iis 这个比较大 大约 4G 需要配置加速器 配置方法在我的前一遍文章介绍了 使用命令 dockerpullmi iis 接下来进行启动 iis 看到我们熟悉的 iis 欢迎界面 使用命令 dockerrun d p80 80micro

    2026年3月19日
    2
  • Android布局优化 UI框架Litho

    Android布局优化 UI框架LithoLitho 是什么 Litho 是一个用于在 Android 上构建高效用户界面 UI 的声明性框架 但不同以往的 UI 框架 它的底层是 Yoga 它通过将不需要交互的 UI 转换为 Drawable 来渲染视图 通过 Yoga 来完成组件布局的异步或同步 可根据场景定制 测量和计算 实现了布局的扁平化 加速了 UI 渲染速度在 Litho 中 使用组件 Component 来构建 UI 而不是直接与传统的 Android 视图进行交互 组件本质上是一个函数 它接受不可变的输入 称为属性 prop

    2026年3月19日
    2
  • 5.荔枝派 zero(全志V3S)-buildroot配置播放视频

    5.荔枝派 zero(全志V3S)-buildroot配置播放视频上面是我创建的群聊 欢迎新朋友的加入 1 开启 ALSA 和 MPLAY 编译烧录 2 测试 amixer c0sset Headphone 0100 unmutecd usr bin mplayer root test mp43 镜像加群找群文件 4 shell 简化操作 bin bashamixer c0sset H

    2026年3月18日
    2
  • Memwatch使用说明

    Memwatch使用说明linux下的测试工具真是少之又少,还不好用,最近试用了memwatch,感觉网上的介绍不太好,所以放在这里跟大家分享 。其实大部分都是看的帮助,很多地方翻译得不好还有错,请原谅指出最好看原文。如果转载或引用,请注明我的博客地址,谢谢。 1介绍MemWatch由 Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具。MemWatch支持 ANSI C,它提供结果日志纪录

    2022年7月13日
    22
  • 遇到“备份集中的数据库备份与现有XXX数据库不同”的错误

    遇到“备份集中的数据库备份与现有XXX数据库不同”的错误当在使用另外一台的数据库备份文件.bak恢复到本机数据库时,遇到“备份集中的数据库备份与现有XXX数据库不同”的错误,后直接登录本机SQLServer数据库master,新建查询,并执行以下命令:    RESTOREDATABASE[XXX]FROM     DISK=NG:/data/zt20080720.bakWITH FILE=1,     NOUNLOA

    2022年6月3日
    37
  • 好友朋友圈动态仅三天可见?点击这个按钮,不管多久都能看

    好友朋友圈动态仅三天可见?点击这个按钮,不管多久都能看微信朋友圈可以说是了解好友的最好地方,但是现在大部分人都会设置朋友圈动态仅三天可见的权限。这样就只能看到好友三天内的朋友圈内容,其实只要点击这个按钮,多久都能看!先给大家介绍一点朋友圈小技巧吧!快速设置朋友圈权限朋友圈最烦人的就是广告了,本来想看看好友们有趣的动态,但翻了好几页都是广告。其实只需长按对方头像,就能设置不看对方的权限啦!发表纯文字朋友圈家里…

    2022年6月11日
    103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号