结构体3之结构体嵌套

注意:

1结构体内部再次定义一个结构体 但是没有创建结构体的实例
  也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量

 1 struct tianchao
 2 {
 3     int data;
 4     char name[24];
 5     struct beijing//结构体内部再次定义一个结构体 但是没有创建结构体的实例
 6                     //也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量
 7     {
 8         char str[100];
 9         int num;
10     };
11 };
12
13 void mainww()
14 {
15     struct tianchao t1;
16     //t1.这里按照道理是可以有四个变量 但是在此不可以 应该是编译器的问题
17
18     //是没有问题
19     /*t1.data = 100;
20     t1.num=66;
21     sprintf(t1.name,"goa");
22     sprintf(t1.str,"gob");*/
23 }
24
25 struct tianchao
26 {
27     int data;
28     char name[24];
29     struct beijingA结构体
30
31     {
32         char str[100];
33         int num;
34     }b1;//内部定义的第一种方式
35     struct beijingA结构体 b2;//内部定义的第二种方式
36 };
37
38 void main()
39 {}
 1 //struct china
 2 //{
 3 //    int data;
 4 //    char name[100];
 5 //    struct guiyang
 6 //    {
 7 //        char str[100];
 8 //        int num;
 9 //    }a1;//不清楚为什么必须加上a1 编译器才识别
10 //};
11 //void main()
12 //{
13 //    struct china c1;
14 //    c1.a1.num = 200;
15 //    sprintf(c1.a1.str,"ad");
16 //    printf("%d,%s",c1.a1.num,c1.a1.str);
17 //
18 //    getchar();
19 //}
20 //方式二
21 struct china
22 {
23     int data;
24     char name[100];
25     //给结构体内部在此定义一个结构体,创建结构体变量,这个变量会直接当作成员
26     //但是没有创建结构体的实例
27     //再次定义的结构体内部的变量 会被当作母结构体的成员变量
28     struct guiyang
29     {
30         char str[100];
31         int num;
32     }a1;
33     struct guiyang b1;
34 };
35 void main()
36 {
37     struct china c1;
38     c1.b1.num = 200;
39     sprintf(c1.b1.str,"ad");
40     printf("%d,%s",c1.b1.num,c1.b1.str);
41
42     getchar();
43 }
时间: 2024-08-01 18:52:52

结构体3之结构体嵌套的相关文章

语言中结构体变量和结构体类型的定义

1.结构体类型定义 定义方式1: Typedef struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 } *LinkList; 定义方式2: struct  LNode {    int  data;  // 数据域    struct LNode   *next;  // 指针域 }: Typedef struct  LNode  *LinkList; 以上两个定义方式是等价的,是将*LinkList定义

C语言的结构体和C++结构体的区别

关于C++中声明结构体中需要使用构造器创建实例对象的语法: 接着上两个代码截图你就初步体会到C语言的结构体和C++结构体的区别了:     对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Swift中也有一样用法的结构体.毕竟Swfit是集大家之所成的现代语言.

入职培训笔记记录--day9(1、指针函数与函数指针、函数指针数组 2、malloc memset 3、递归函数 4、结构体 5、共用体---》大小端 6、枚举)

1.指针函数与函数指针.函数指针数组 指针函数:返回值为指针的函数 char *fun() { char str[] = "hello world"; return str; } int main() { char *p = fun(); puts(p); return 0; } 编译时,会出现警告,返回了一个已经被释放掉的内存空间的首地址解决方法:1.static 2.char *str = "hello world"; 3.malloc 注意:使用完后要free

C语言的结构体和 C++结构体的区别

 C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的初始化方法> 接着下面两个代码截图(一个是C源码,一个是C++源码)对比你就初步体会到C语言的结构体和C++结构体的区别了:      对于右边的C++结构体的使用类似Java,C++,Swift中的类,类中有构造器方法,然后构造器创建这个类的实例对象. 当然Sw

数组强制转换成结构体指针,结构体内部指针的指向问题

如果直接操作结构体成员是不会取到不期望的值 但是对于要求连续数据格式的时候需要考虑对齐的问题 例如通讯中的数据帧格式等 ,如 ip数据包等#pragma   pack(1) struct   tagStruct {     ... } t; #pragma   pack() 的方式来强制连续存放 其中前面   pack(1)   是指对齐边界为   1 1.几个结构体例子: struct{short a1;short a2;short a3;}A; struct{long a1;short a2

C的日记-结构体变量和结构体数组

[结构体] 定义结构体的两方式    <1>    struct student{};        struct student a={10001,"云中",'M',"北京"};    <2>    struct student{        }a={10001,"云中",'M',"北京"};定义结构体数组a换成a[],struct student stu[3]={{..},{..},{..}};

Visual Studio 调试中将结构体指针转换为结构体数组查看

Visual Studio 调试中将结构体指针转换为结构体数组查看 1. 首先,我们在调试过程中,发现一个指针,无法显示其数组形式,很难受... 2. 将其添加到"监视"窗口 3. 修改监视的值,后面加上查看的索引个数 4. 其转化为数组 原文地址:https://www.cnblogs.com/onetrainee/p/12232646.html

文件存储结构inode与RAM结构建立联系

linux下一切皆文件,大致可分为以下几类:目录.普通文件.硬连接.软连接.字符设备.块设备.FIFO.Socket,其在物理存储体内存储按inode和数据块存储,inode代表元数据,是除实际数据外的所有(属性)数据.根据不同的文件类型有以下几种情况: >对于常规文件,文件的数据存储在数据块中,其他数据(即属性)存储在inode中. >对于目录,该目录下的所有文件名和目录名存储在数据块中,注意文件名保存在它所在目录的数据块中,除文件名之外,ls -l命令看到的其它信息都保存在该文件的inod

hbase非结构化数据库与结构化数据库比较

目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不是很好,类似于互联网这样的访问量容易造成宕机. hbase hbase是基于列存储的数据库与传统的基于行存储的关系型数据库相比,可扩展性好.Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性