C语言的几种结构体Struct的赋值方法


1. 定义结构体类型

这里是两个结构体的基本结构。

struct Init{int a;float b;double c;
}I1;
struct SIMPLE{int a;float b;double c;
};
stuct SIMPLE s1;

然而即使两个结构体成员列表全部一样,但是这两者还是被编译器当做完全不同的存在。一个类型是struct Init 一个类型是 struct SIMPLE就相当于int 和float 一样。
结构体中可以包含其他结构体。

  1. 结构体中包含其他结构体类型变量。
struct COMPLEX{char string[100];struct SIMPLE id1;
};
  1. 结构体中也可以包含指向自己的结构体指针。
struct NODE{int nodenum;struct NODE *NextNode;
}

NextNode就是指向相同结构体类型中的下一个结构体的首地址,在未定义的情况下NextNode的值一般都是置NULL。这样就有可能无限延伸是不是很神奇。
下面的内容中,需要大家稍微了解下,初始化与普通赋值的区别。
变量的初始化:是指在定义变量的同时就为该变量赋值。
结构体变量在
初始化*时应该用**花括号“{}”**将用来初始化的各个数值括起来,并且各个数值之间要用逗号分隔开来,同时必须保证数值与相应成员变量的类型要一一对应。
对于变量而言,如果已经定义了类型,那么在系统内部已经为该变量开辟了内存空间。
成员变量在结构体变量定义好后,已经置为各自类型的NULL状态,如int a;a默认值为0。
这里有种特殊情况。

直接定义结构体变量。也就是声明一个无名的结构体类型。

无名结构体变量由于省略了结构体类型名,无法记录该结构体类型,所以该方式只能用来声明结构体变量,而且以后也不能用他来声明变量或函数等等。

#include <stdio.h>
struct{int a;double b;char *c;
}idx;

也就是下面的内容中,定义结构体变量之后,初始化定义是无法用的,只可以用成员运算符。

1.1 定义结构体类型时,同时定义结构体变量

在这种情况下赋值成员变量可以是同时进行,也可以是先后进行,就和int a = 1;和int a;a = 1;是一样的道理。但是意义上有些不同
定义结构体变量的同时,初始化结构体变量,相当于int a = 1;
定义结构体变量之后,初始化结构体变量,这在普通变量中是不可以的,因为这就相当于 int a;int a = 1;这样子对普通变量而言就是错误。
定义结构体变量之后,对结构体变量进行非初始化的赋值,相当于 int a;a = 1;

1.1.1 定义结构体变量的同时,初始化结构体变量

#include <stdio.h>
struct Init{int a;double b;char *c;float d;
}id1 = {1,2.0,"hello"},id2[2],*id;

赋值之后只是修改了这个成员变量的值,如果赋值只是修改该变量的值,对于地址等内容没有任何影响。

1.1.2 定义结构体变量后,赋值成员变量

#include <stdio.h>
struct Init{int a;double b;char *c;float d;
}id2;

这种就是还未经过初始化的结构体成员变量定义。而想要在未经初始化的结构体变量定义之后,对该结构体进行成员变量修改。
形式上有所不同,可以分为以下两种方式。

第一种是有序赋值(初始化定义)。
struct Init id2 = {1,1.1,"hello"};

这样默认float为空。
【注1】这种样式是结构体变量的定义。相当于前面虽然已经定义了结构体变量,但是那某种程度上也是声明,而这里对结构体变量的值以定义的形式进行了初始化。
而这也就意味这样的赋值只能进行一次,如果再次进行就意味着重复定义,如下所示。

【注2】而且不能将结构体作为一个整体进行输入输出,也就是结构体变量一旦定义完成之后,不能当做被一个单独的变量,进行赋值如下图所示。

但是可以用下面的成员运算符进行赋值。

第二种是无序赋值,也就是键值对类型。

这种方式利用成员运算符,进行赋值。而这种也是分为结构体内部赋值和结构体外部赋值
这种赋值方式涉及结构体成员的引用。
引用方式为:结构体变量名.成员名。起哄“.”是成员运算符,也称为分量运算符,它在所有运算符中优先级最高。

下面这种是对成员变量赋值。即使是在未经过结构体变量初始化的情况下,也是可以赋值的。

struct Init id2;
id2.a = 1;
id2.c = "world";
id2.d = 1.1;

下面这种则是初始化,也是定义,即利用成员运算符进行初始化,在结构体变量内部,在成员运算符前面加或者不加结构体变量名都是可以的。

struct Init id2 = {id2.a = -1,.c = "hello",.b = 4.0
};

2. 补充

  • 如果成员本身又属于一个结构体变量类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,并且只能对最低级的成员进行操作。
  • 可以将一个结构体变量直接赋值给另一个具有相同结构的结构体变量。
  • 对成员变量可以像普通变量一样进行各种运算。
  • 可以引用成员的地址,也可以引用结构体变量的地址。结构体变量的地址主要用作函数参数,传递结构体的地址。

C语言的几种结构体Struct的赋值方法相关推荐

  1. c语言结构体定义蚂蚁,C语言结构体(struct)常见使用方法

    C语言结构体(struct)常见使用方法 C语言结构体(struct)常见使用方法 基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性的聚合) ...

  2. 结构体数组的赋值方法(常用的三种,包含字符串)

    目录 一.按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy) 二.对数组整体进行赋值.(一次性需要把所有的都添加进去,不需要strcpy) (1) 在声明数组的时候,进行赋值 (2)对有 ...

  3. matlab 不同函数间传递结构体数据_matlab 结构体struct函数使用方法

    1.struct函数直接定义 查阅文档是这样的:struct(field1,value1,field2,value2,.....) 上面这个格式很重要记住 field1和field2称为这个结构体的字 ...

  4. C语言 结构体 struct Cat cat1;

    引入 使用传统技术解决 需要定义多个变量或数组 结构体与结构体变量的关系示意图 类似Java类中的对象(结构体)与属性(结构体变量) 一切物体都可以看作对象(结构体) 补充:C语言数据类型 简单使用案 ...

  5. Go语言中的结构体 (struct)

    Golang官方称Go语言的语法相对Java语言而言要简洁很多,但是简洁背后也灵活了很多,所以很多看似很简单的代码上的细节稍不注意就会产生坑.本文主要对struct结构体的相关的语法进行总结和说明. ...

  6. c语言用typedef定义结构体,C语言结构体定义 typedef struct

    c语言规范,定义结构体: typedef struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSWER_HE ...

  7. [ C语言 ]指针---结构体(struct)---分支语句(1)---初识C语言末尾

    文章目录 前言 一,指针 二,结构体(struct) 三,分支语句(选择结构) 总结​​​​ 前言 本篇文章主要记录指针末尾,结构体,和分支语句(选择结构) --------------------- ...

  8. C语言中的结构体——struct

    结构体是C语言中很重要的知识点,结构体使得C语言有能力去描述复杂类型.         我们知道C语言中有许多类型,如:int.char.double······,但是现实世界中存在很多复杂的对象,不 ...

  9. C语言结构体struct详解与实例

    目录 1.定义 2.应用 2.1初始化 2.2使用 3.结构体对齐规则与存储 1.定义 C语言中结构体(struct关键字定义)是一种自定义数据类型.通过结构体的定义可以将多种不同类型数据形成一个组合 ...

最新文章

  1. IOS开发笔记12-Object-C中的对象与内存
  2. 量子物理 詹班 计算机,6量子物理作业答案
  3. x20 android7.0性能,vivoX7Plus和vivoX20综合对比评测 看完这些优缺点再做判断
  4. 师从施一公,4年8篇CNS,西湖大学博士后获世界最具潜力女科学家奖
  5. 人工智能大脑如何调控智能交通“疏堵”?
  6. VC++六种Runtime Library
  7. vue-webpack3x -- webpack4x
  8. sleep期间读取所有_java并发学习第四弹:走进JDK源码去了解sleep和join
  9. 乌班图系统安装谷歌浏览器
  10. 你只管打开这个网站,剩下的交给「卧槽」!
  11. 计算机电源大小,常见电脑主板和电源尺寸
  12. linux 蓝牙驱动
  13. 小白如何搭建自己的网络服务器
  14. 强者的系统:高观点下的人生
  15. redission实现分布式锁
  16. canvas画带圆角矩形
  17. 菜鸟带你使用JieCaoMediaPlayer播放本地视频
  18. kafka connector 使用总结以及自定义connector开发
  19. 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题
  20. 面向对象程序设计第三次实验课——Wuxing

热门文章

  1. 【java学习】EasyExcel的简单使用
  2. Oracle项目管理系统之合同索赔反索赔
  3. 好用的开源 API 接口测试工具
  4. 2021年电工(初级)及电工(初级)证考试
  5. 弹性地基梁计算程序 注册机_弹性地基梁计算程序是怎样的? 弹性地基梁几种计算方法的分析比较...
  6. 乡城流动人口RUMiC2008数据
  7. 1、MPC 算法(模型预测控制算法(MPC算法)轨迹跟踪控制)
  8. 基于MPC算法控制车辆的运动轨迹
  9. 储能之动力电池与储能电池区别?
  10. Python使用scapy和dpkt抓包并解析