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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1.23 lseek函数[通俗易懂]

    1.23 lseek函数[通俗易懂]参考:牛客网C++高薪求职项目《Linux高并发服务器开发》1.22read、write函数专属优惠链接:https://www.nowcoder.com/courses/cover/live/504?coupon=AvTPnSG

    2022年6月24日
    25
  • RewriteCond和13个mod_rewrite应用举例Apache伪静态

    RewriteCond和13个mod_rewrite应用举例Apache伪静态1.给子域名加www标记RewriteCond%{HTTP_HOST}^([a-z.]+)?example.com$[NC]RewriteCond%{HTTP_HOST}!^www.[NC]RewriteRule.?http://www.xample.com%{REQUEST_URI}[R=301,L]这个规则抓取二级域名的%1变量,如果不是以www开始,

    2022年6月6日
    31
  • virsh重启虚拟机命令_vmware创建的虚拟机不见了

    virsh重启虚拟机命令_vmware创建的虚拟机不见了使用QEMU/KVM虚拟化平台启动虚拟机,通常需要手动输入一行很长的命令,里面可能有几十个参数,要想启动多个虚拟机,以及监视多个虚拟机运行状态会非常困难,这时候就需要virsh这样一个虚拟机的管理工具。由于前面的文章已经介绍了如何安装QEMU以及如何启动虚拟机,这里就直接从QEMU/KVM安装好以后的地方开始。1.安装libvirt在ubuntu系统中,使用apt-get安装的libvirt还是1…

    2022年8月12日
    15
  • loadrunner性能测试步骤_loadrunner可以做接口测试吗

    loadrunner性能测试步骤_loadrunner可以做接口测试吗LoadRunner性能测试教程1.工具介绍及下载2.操作步骤2.1.VuGen脚本编写及运行2.2.Controller场景运行2.3.Alalysis分析1.工具介绍及下载LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。LoadRunner可适用于各种体系架构的自动负载测试,能预测系统

    2022年10月10日
    30
  • 流量精灵刷流量的实例教程

    流量精灵刷流量的实例教程流量精灵大概是去年的这个时候出来的一款提升网站访问量的软件,由于软件比较优秀,当时我就及时关注这款软件,现在时隔一年的时候,流量精灵在低调的发展下,版本也更新到了2.1.7。而以前只是写了一下流量精灵的测评文章,感觉已不能满足大家的需求,所以今天为广大的新手及新站长朋友写上详细的使用教程。流量精灵的功能介绍:主要就是刷流量的。这里的流量主要是指网站的流量,网站流量简单一点说就是访…

    2022年9月29日
    1
  • 【php】获取服务器公网ip,内网ip「建议收藏」

    【php】获取服务器公网ip,内网ip「建议收藏」<?php/***CreatedbyPhpStorm.*User:zhudechao*Date:2019/3/20*Time:下午5:27*/namespacezhdcp\ip;classIp{publicfunctionget_outer(){$ch=curl_init(‘http://…

    2022年5月15日
    27

发表回复

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

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