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


相关推荐

发表回复

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

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