C语言 结构体与结构体指针用法总结

C语言 结构体与结构体指针用法总结在 C 语言开发中 结构体用到的机会很多 所谓结构体 就是定义一种里面包含多种元素的变量 我们来看一个简单的例子 比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息 结构体变量定义如下 structbook charname 30 charauthor 20 structbooka 2 Nature Lina

在C语言开发中,结构体用到的机会很多。所谓结构体,就是定义一种里面包含多种元素的变量。

我们来看一个简单的例子。比如你想定义一个书名列表然后为每本书创建书名和作者作为书的信息。结构体变量定义如下:

struct book { char name[30]; char author[20]; }; struct book a[2] = { { "Nature","Lina" },{ "Animals","Nick" } };

以上代码定义了一个名为book的结构体,然后a作为带有这个结构体的变量的一个内含两本书的列表(结构体数组)。也可以定义为如下:

struct book { char name[30]; char author[20]; }a[2] = { {"Nature","Lina" },{ "Animals","Nick" } };

所完成的功能是完全一样的。第二种方法用得更多因为写法更简练。

遍历结构体中成员内容并打印出来,完整代码如下:

#include<stdio.h> int main() { struct book { char name[30]; char author[20]; }a[2] = { {"Nature","Lina" },{ "Animals","Nick" } }; int i; for (i = 0; i < 2; i++) { printf("book name: %s author: %s\n", a[i].name, a[i].author); }; getchar(); return(0); }

 

运行后的输出值为:

 

 

定义一个指向结构体(book)变量的指针函数p:struct book *p

现在就可以用结构体指针完成上述同样的功能了(结构体定义在main函数外为全局变量,main函数内为局部变量,两种均可):

#include<stdio.h>

struct book { char name[30]; char author[20]; }a[2] = { {"Nature","Lina" },{ "Animals","Nick" } }; int main() { struct book*p; for (p = a; p < a+2; p++) { printf("book name: %s author: %s\n", p->name, p->author); }; getchar(); return(0); }

 

输出值和之前的程序一样。

 

 

以下例子为使用&地址符号给结构体指针赋值:

#include<stdio.h>

struct book { char name[30]; char author[20]; }; int main() { struct book*p; struct book a[2] = { { "Nature","Lina" },{ "Animals","Nick" } }; p = &a[0]; printf("book name: %s author: %s\n", p->name, p->author); getchar(); return(0); }

 

输出结果为存入的a[0]的信息:

 

book name: Nature    author: Lina

 

另外在许多大型软件的开发中,经常会定义结构体变量为宏变量以简化结构体的引用。例如:typedef struct book{…}BOOK, 引用的时候就直接定义BOOK a。简而言之,就是把struct book替换为BOOK。

#include<stdio.h> typedef struct book { char name[30]; char author[20]; }BOOK; int main() { BOOK*p; BOOK a[2] = { { "Nature","Lina" },{ "Animals","Nick" } }; p = &a[0]; printf("book name: %s author: %s\n", p->name, p->author); getchar(); return(0); }

 

 



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

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

(0)
上一篇 2025年6月3日 下午6:01
下一篇 2025年6月3日 下午6:22


相关推荐

  • 树莓派I2C通过Shell操作FDC2214[通俗易懂]

    树莓派I2C通过Shell操作FDC2214[通俗易懂]陈拓chentuo@ms.xab.ac.cn2020/07/21-2020/07/29FDC2214是Ti公司的一款低功耗高精度的电容传感器芯片。本文讲述用树莓派LinuxShell配置和操作FDC2214,可以快速熟悉并进行原型开发。1.树莓派换源为了加快所需软件的下载,我们需要先换源。首先查看系统版本:lsb_release-a修改软件更新源/etc/apt/sources.listsudonano/etc/apt/sources.list在下面的语.

    2022年5月26日
    47
  • jediscluster api_java.lang.throwable

    jediscluster api_java.lang.throwable由于redis的集群rediscluster不支持keys这样的多key操作(具体原因由于sharding后,不同的key属于不同的slot,难以支持原子操作)。所以如果一个对外需要对缓存做失效处理时比较棘手。所以本类提供工具方法再rediscluster查找按照hashTags处理的keys和一般的keys。基于jediscluster实现。有优化空间,现在懒得改了importjav…

    2022年10月14日
    4
  • 修改配置nginx,限制无良爬虫频率

    修改配置nginx,限制无良爬虫频率

    2021年8月30日
    60
  • eXtremeDB XML[通俗易懂]

    eXtremeDB XML[通俗易懂]ForC/C++applicationstheeXtremeDBschemacompileroption“–x”causes mcocomptogenerateinterfacefunctionstoretrieve,createandreplace(update) thecontentsofanobjectwiththecontent

    2022年10月14日
    6
  • FIR 带通滤波器参数设计流程

    FIR 带通滤波器参数设计流程假设有一段10kHz的语言,现需要对2~3kHz之间的语言信号进行提取,要求1.5kHz及3.5kHz以上的频率需要有40dB的衰减1、求数字频率指标通带下边频:wpl=2∗π∗fpl/fs=0.4πw_{pl}=2*\pi*f_{pl}/f_s=0.4\piwpl​=2∗π∗fpl​/fs​=0.4π通带上边频:wph=2∗π∗fph/fs=0.6πw_{ph}=2*\pi*f_{ph}/f_s=0.6\piwph​=2∗π∗fph​/fs​=0.6π下阻带上变频:wsl=2∗π∗fsl

    2022年5月30日
    53
  • 两分钟!Cursor+Claude3.7将任何内容生成可视化网页(附完整教程)

    两分钟!Cursor+Claude3.7将任何内容生成可视化网页(附完整教程)

    2026年3月16日
    2

发表回复

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

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