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


相关推荐

  • centos安装VirtualBox增强包VBoxGuestAdditions

    centos安装VirtualBox增强包VBoxGuestAdditions1.如果你的CentOS版本早于6,那么需要在/etc/grub.conf中添加一行divider=10,以将这个参数传递给核心,以减少idleCPUload。2.#yumupda

    2022年7月1日
    24
  • 如何把文件复制到桌面_如何把桌面文件放一起

    如何把文件复制到桌面_如何把桌面文件放一起如何解决电脑桌面文件无法删除问题电脑是现在最常用的工具之一,有些用户遇到了桌面文件无法删除问题,想知道如何解决,接下来小编就给大家介绍一下具体的操作步骤。具体如下:1.首先第一步鼠标右键单击桌面,在弹出的菜单栏中根据下图所示,点击【刷新】选项,查看是否删除文件,或者将电脑重新启动后再次删除。2.第二步如果仍然无法删除文件,则打开【计算机】窗口,根据下图所示,依次点击【组织-文件夹和搜索选项】。…

    2025年8月25日
    3
  • centos7卸载软件命令_linux安装docker

    centos7卸载软件命令_linux安装docker1首先搜索已经安装的docker安装包[root@localhost~]#yumlistinstalled|grepdocker或者使用该命令[root@localhost~]#rpm-qa|grepdockerdocker.x86_642:1.12.6-16.el7.centos@extras

    2022年8月30日
    7
  • 使用C#创建WebService实例

    使用C#创建WebService实例新增WebService专案更改服务程式名称重命名程式名称Service1.asmx修改为TestService.asmx此时下面的cs代表文件也会跟着修改,但可发现,代码中的类名并没有跟着变动修改类名称手动将类名称由Service1修改为TestService如果此时执行发布会发现还是会vb.net教程有问题,报错無法建立型別‘.Service1’修改服务绑定代码在TestService.asmx上右键选择打开方式,选择“Web服务编辑器”打开此时会看到服务所有设定,

    2022年7月21日
    13
  • java socket通讯乱码问题的解决

    java socket通讯乱码问题的解决使用socket通讯经常会遇到客户端、服务器端字符编码不一致的情况,如果传输的信息包含中文,这时我们可能就需要对传输的信息的按照指定的字符集进行解码或者编码首先我们了解jdkapi中的几个基本的概念String类StringpublicString(byte[] bytes,String charsetName)th

    2022年7月8日
    60
  • Python基本特殊方法之__format__

    __format__()方法__format__()传参方法:someobject.__format__(specification)specification为指定格式,当应用程序中出现&quo

    2021年12月19日
    49

发表回复

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

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