iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言示例讲解结构体的声明与初始化方法
  • 281
分享到

C语言示例讲解结构体的声明与初始化方法

2024-04-02 19:04:59 281人浏览 薄情痞子
摘要

目录一、结构体声明的结构1.直接声明2.使用typedef声明一个新的类型3.不完全声明二.结构体初始化1.声明(同时定义)时直接赋值2.定义时直接赋值3.定义后赋值4.指定初始化一

一、结构体声明的结构

1.直接声明

struct tag { 
    member-list;
    member-list;
    member-list;  
    ...
} variable-list;

tag 是结构体类型的标签。

member-list 结构体的元素定义,比如 int i; 或者 float f,或者其他有效的变量定义。注意此处使用“;”结尾。

variable-list 结构体变量,定义在结构的末尾,最后一个分号之前,可以指定一个或多个结构变量。结构体标签和结构体变量可以不必同时出现。

2.使用typedef声明一个新的类型

typedef struct
{
    int a;
    char b;
    double c; 
} Simple_t;
Simple_t u1, u2[20], *u3;

现在可以用Simple_t作为类型声明新的结构体变量。

3.不完全声明

(C99 6.2.5)不完整类型(incomplete types):与对象类型相反,包括那些类型信息不完整的对象类型(incompletely-defined object type)以及空类型(void)。

有时候,必须声明一些相互之间存在依赖的结构,可能是自包含,也可能互相依赖,这时就需要不完全声明。

情况一:自包含

//此结构体的声明包含了指向自己类型的指针
struct node
{
    char string[100];
    struct NODE *next_node;
};

情况二:互相包含

struct B;    //对结构体B进行不完整声明
//结构体A中包含指向结构体B的指针
struct A
{
    struct B *partner;
    //other members;
};
//结构体B中包含指向结构体A的指针,在A声明完后,B也随之进行声明
struct B
{
    struct A *partner;
    //other members;
};

注意:以上两种结构体声明中的元素都是指针指向结构体,没有遇到过不是指针的(理论上也不可行)。

注意:要分清结构体类型声明和变量定义(声明是不会占用内存空间的,而变量定义会占用相应内存空间)。如:

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
};

是结构体类型声明;

struct Student student1;

是结构体变量定义;

struct Student{         //声明结构体
    char name[20];      //姓名
    int num;            //学号
    float score;        //成绩
}student1;

是结构体类型声明的同时定义一个结构体变量。

二.结构体初始化

1.声明(同时定义)时直接赋值

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book = {"C 语言", "RUNOOB", "编程语言", 123456};

2.定义时直接赋值

# include <stdio.h>
struct AGE
{
    int year;
    int month;
    int day;
};
struct STUDENT
{
    char name[20];
    int num;
    struct AGE birthday;
    float score;
};
int main(void)
{
    struct STUDENT student1 = {"小明", 1207041, {1989, 3, 29}, 100};
    return 0;
}

注意:STUDENT是结构体类型的标签,而不是结构体变量。

3.定义后赋值

 struct STUDENT student1; 
 student1.num = 1207041;

4.指定初始化

(C99标准)指定初始化(designated initializer),指定部分/全部元素初始化。

struct book gift = 
{ 
     .value = 25.99,
     .author = "James Broadfool",
     .title = "Rue for the Toad"
}; 

注意:最后一个元素赋值后边加不加逗号都没有问题。

到此这篇关于C语言示例讲解结构体的声明与初始化方法的文章就介绍到这了,更多相关C语言结构体声明与初始化内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C语言示例讲解结构体的声明与初始化方法

本文链接: https://www.lsjlt.com/news/153722.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言示例讲解结构体的声明与初始化方法
    目录一、结构体声明的结构1.直接声明2.使用typedef声明一个新的类型3.不完全声明二.结构体初始化1.声明(同时定义)时直接赋值2.定义时直接赋值3.定义后赋值4.指定初始化一...
    99+
    2022-11-13
  • C语言使用四种方法初始化结构体
    目录什么是结构体结构体的优点定义方法一:定义时赋值方法二:定义后逐个赋值方法三:定义时乱序赋值(C风格)方法四:定义时乱序赋值(C++风格)什么是结构体 在实际问题中,一组数据往往有...
    99+
    2022-11-12
  • Go语言基础变量的声明及初始化示例详解
    目录一、概述二、声明变量三、编译器推导类型的格式【一定要赋值】四、短变量声明并初始化五、匿名变量——没有名字的变量六、注意七、案例一、概述 变量的功能是存储用户的数据 二、声明变量 ...
    99+
    2022-11-12
  • go语言数组及结构体继承和初始化示例解析
    目录分类数组数组定义结构体结构体继承结构体初始化成员的操作同名字段其它匿名字段非结构体类型结构体指针类型结构体字段实现接口分类 类型名称长度默认值说明pointer指针 n...
    99+
    2022-11-13
  • go语言结构体初始化及赋值的方法是什么
    在Go语言中,结构体的初始化及赋值可以通过以下两种方法进行: 字面量初始化:直接使用结构体类型的名称,并在花括号内指定字段的初始值...
    99+
    2023-10-25
    go语言
  • C语言编程数据结构栈与队列的全面讲解示例教程
    目录一、栈的表示和实现1栈的概念和结构2栈的初始化3压栈(栈顶插入一个数据)4出栈(栈顶删除一个数据)5取栈顶元素6取栈顶元素7判断栈是否为空二、队列的表示和实现1队列的概念及结构2...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作