结构体、共用体和用户定义类型(2)

  2.2结构体类型的变量、数组和指针变量的定义

  可以用以下四种方式定义结构体类型的变量、数组和指针变量:

  (1)紧跟在结构体类型说明之后进行定义。例如:

    struct student

    {

      char name[12];

      char sex;

      struct date birthday;

      float sc[4];

    } std, pers[3], *pstd;

  此处,在说明结构体类型 struct student 的同时,定义了一个结构体变量 std、有3个变量的结构体数组 pers 和基类型为结构体类型的指针变量 pstd。

  (2)在说明一个无名结构体类型的同时,直接进行定义。如:上述定义的结构体中可以把 student 省略,写成:

    struct

    {...

    } std, pers[3], *pstd;

  这种方式与前一种的区别仅仅是省略了结构体标识名,通常用在不需要再次定义此类型结构体变量的情况。

  (3)先说明结构体类型,再单独进行变量定义。如:

    struct student

    {...

    };

    struct student std, pers[3], pstd;

  此处,先说明了结构体类型 struct student,再由一条单独的语句定义变量 std、数组 pers 和指针变量 pstd。使用这种定义方式应注意:关键字 struct 必须和结构体标识名 student 共同说明结构体类型。

  (4)使用 typedef 说明一个结构体类型名,再用新类型名来定义变量。如:

    typedef struct

    {

      char name[12];

      char sex;

      struct date birthday;

      float sc[4];

    } STREC;

    STREC std, pers[3], *pstd;

  STREC 是一个具体的结构体类型名,它能够唯一地标识这种结构体类型。因此,它可以用来定义变量,如同使用 int 、char  一样,不可再写关键字 struct。

  2.3 给结构体变量、数组赋初值

  和一般变量、数组一样,结构体变量和数组也可以在定义的同时赋初值。

  2.3.1 给结构体变量赋初值

  所赋初值放在一对花括号中,如:

    struct student

    {

      char name[12];

      char sex;

      struct date birthday;

      float sc[4];

    } std = {"Li Ming", ‘M’, 1997, 5, 10, 88.0, 76.0, 85.5, 90.0};

  赋初值后,变量 std 内容如图所示:

  name  sex    birthday  sc[0]  sc[1]  sc[2]  sc[3]

         year   month  day

Li Ming M 1997 5 10 88.0 76.0 85.5 90.0

  对结构体变量赋值时,C 编译程序按每个成员在结构中的顺序一一对应赋初值,不允许跳过前面的成员给后面的成员赋初值。但可以只给前面的若干成员赋初值,对后面未赋初值的成员,系统将自动为数值型和字符型数据赋初值0。

  2.3.2 给结构体数组赋初值

  由于数组中每个元素都是一个结构体,因此通常将其成员的值依次放在一对花括号中,以便区分各个元素。

    struct bookcard

    {

      char num[5];

      float money;

    } bk[3] = { {"NO.1", 35.5}, {"NO.2", 25.0}, {"NO.3", 66.7} };

         /* bk[0]      bk[1]      bk[2]  */

  也可以通过这种赋初值的方式,隐含确定结构体数组的大小。即:由编译程序根据所赋初值的成员个数决定数组元素的个数。以下是一个给二维数组赋初值的例子:

    struct

    {

      char ch;

      int i;

      float x;

    } arr[2][3] = {

             { {"a", 1, 3.0e10}, {"a", 2, 4.0e10}, {"a", 3, 5.0e10} },  /*第一行*/

             { {"b", 1, 6.0e10}, {"b", 2, 7.0e10}, {"b", 3, 8.0e10} }  /*第二行*/

           };

  根据花括号的嵌套关系,可以清楚的分辨出所赋初值与数组元素一一对应的关系。

  2.3.3 相同类型结构体变量之间的整体赋值

  ANSI C 标准允许相同类型的结构体变量之间进行整体赋值。如:

    struct

    {

      char name[10];

      int num;

    } per1, per2 = {"Jhon", 46};

  执行赋值语句:per1 = per2; 则 per2 中每个成员的值都赋给了 per1 中对应的同名成员。这种赋值方法必须要保证赋值号两边结构体变量的类型相同。

时间: 2024-08-08 11:51:13

结构体、共用体和用户定义类型(2)的相关文章

结构体、共用体和用户定义类型(1)

C语言的基本类型有:整型(int).字符型(char).浮点型(float).双精度型(double).空值型(void)以及派生类型 (指针和数组).本章介绍C语言中可由用户构造的三种数据类型: (1)用户定义类型(typedef):(2)结构体(struct):(3)共用体(union): 1 用typedef说明新类型名 C语言允许用 typedef 说明一种新类型名,一般形式为: typedef 类型名 标识符: “类型名”必须是在此语句前已有定义的类型标识符.“标识符”是一个用户定义标

瘋子C语言笔记(结构体/共用体/枚举篇)

 (一)结构体类型 1.简介: 例: struct date { int month; int day; int year; }; struct student { int num; char name[20]; char sex; int age; struct date birthday; /*birthday 是 struct date 类型*/ char addr[30]; }student1,student2; (1):结构体可嵌套 (2):与枚举相比结构体内元素为变量,而枚举为常

8.1 结构体 共用体 typedef 枚举

typedef :  给类型起一个新的名字 int main() { unsigned int a = 10; } 可以用下面表示: typedef unsigned int u32_t; int main() { u32_t a = 10; } 与definde的区别: typedef char *  N; #define N char* N p1,p2,p3; define的话  p2 p3 变成了char 类型 结构体 :不同类型元素的汇聚 ①匿名结构体 struct{ int id;  

全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

例14.2 对比向函数传递结构体数组名和向函数传递结构体变量名的区别. 1 #include<stdio.h> 2 3 typedef struct 4 { 5 int num; 6 double mark; 7 }REC; 8 9 void sub1(REC x) 10 { 11 x.num = 23; 12 x.mark = 81.5; 13 } 14 15 void sub2(REC y[]) 16 { 17 y[0].num = 12; 18 y[0].mark = 77.5; 19

不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 共用体 枚举 类型定义符 示例cStruct.h #ifndef _MYHEAD_STRUCT_ #define _MYHEAD_STRUCT_ #ifdef __cplusplus extern "C" #endif char *demo_cStruct(); #endif cStruct.c /* * 结构体,共用体,枚举,类型定义符 * * 注:结构体变量在做参数传递时,其内每个

C语言 共用体

//共用体 union #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> // union 共用体,构造数据类型,也叫联合体,用途:十几个不同类型的变量共占一段内存(相互覆盖) //共用体在类型定义的时候并不分配内存,定义共用体变量的时候才分配内存 union data{ char c; int a[10]; }udat1; union stu{

C 共用体

C 共用体 共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值.共用体提供了一种使用相同的内存位置的有效方式. 定义共用体 为了定义共用体,您必须使用 union 语句,方式与定义结构类似.union 语句定义了一个新的数据类型,带有多个成员.union 语句的格式如下: union [union tag] { member definition; member definition; ... member d

共用体与枚举

共用体 共同体和结构体类似,也是一种构造类型的数据结构,既然是构造类型的,咱们先定义除类型,然后用类型定义变量 定义共用体类型得方法和结构体非常相似,把struct 改成union就可以 在进行某些算法得时候,需要使几种不同类型的变量存到同一段内存单元中,几个变量间相互重叠 这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作"共用体"类型结构,共用体所有成员占有同一段地址空间 共用体的大小是其占内存长度最大的成员的大小 举例 typedef struct data{ shor

应用C#和SQLCLR编写SQL Server用户定义函数

摘要: 文档阐述使用C#和SQLCLR为SQL Server编写用户定义函数,并演示用户定义函数在T-SQL中的应用.文档中实现的 Base64 编码解码函数和正则表达式函数属于标量值函数,字符串分割函数属于表值函数,而平方平均数函数属于聚合函数. 环境 要求:SQL Server 2005/2008,Visual Studio 2005/2008,C# 2.0. 本页内容 概述 启用SQLCLR Base64 编码解码函数 正则表达式函数 字符串分割函数 平方平均数函数 总结 概述 微软在推出