以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对。于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题。还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不对,原因就和之前他理解的一样。
于是晚上到住处在网上查了一下,说是可以的,因为是同样的数据类型,而C语言在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,这里因为同样结构体变量,属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。
同时敲了一段很简单的代码测试一下,看到底是为什么。发现确实是这样。那么C语言在变量间的赋值是如何进行的呢?
再查找发现在C中一个变量名其实就是一个地址对应着一块内存的起始地址,赋值操作符就是找到这块内存的起始地址。
http://www.lslnet.com/linux/f/docs1/i07/big5143193.htm
网上一个关于结构体变量复制的帖子

#include <stdio.h>

typedef struct
{
     unsigned char a;
     unsigned char b;
     unsigned char c;
     unsigned char d[10];
}TestStruct;

int main(void)
{
     TestStruct a = {0};
     TestStruct b = {0};

a.a = 1;
     a.b = 2;
     a.c = 3;
     a.d[2] = 5;

b = a;

printf("a.a:%d \n a.b:%d \n a.c:%d \n a.d[2]:%d \n", a.a, a.b, a.c, a.d[2]);

printf("b.a:%d \n b.b:%d \n b.c %d \n b.d[2]:%d \n", b.a, b.b, b.c, b.d[2]);

return 0;

}

对于结构体变量赋值的误区相关推荐

  1. 【C 语言】结构体 ( 结构体变量之间的赋值 )

    文章目录 一.结构体变量之间的赋值 二.完整代码示例 一.结构体变量之间的赋值 声明结构体变量 s1 , 同时进行初始化操作 ; // 声明结构体变量 , 同时进行初始化操作Student s1 = ...

  2. C语言结构体变量和结构体数组-学习笔记(十六)

    一.结构体变量 1.结构体概念 将不同类型的数据组合成一个有机的整体即为结构体.结构体由许多组织在一起的数据项组成,这些数据项不需要属于同一类型. 2.结构体类型及结构体变量定义 (1)结构体类型声明 ...

  3. 结构体的赋值和初始化与取出结构体变量中的成员

     1 /*结构体的赋值和初始化*/  2   3 # include <stdio.h>  4   5 struct Student   6 {  7     int age;  8    ...

  4. 两个结构体变量可以直接赋值吗_Gox语言中的结构类型-GX6

    Gox语言中,结构类型(struct)其实并不是很常用,因为Gox语言本身就是动态类型的语言,一般的类似结构体的数据直接用数组或者映射类型就可以了,里面的数据项可以是任意类型,包括嵌套复合类型.因此, ...

  5. ACMNO.42 C语言-第几天 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。利用结构体的在最下面

    题目描述 定义一个结构体变量(包括年.月.日).计算该日在本年中是第几天,注意闰年问题. 输入 年月日 输出 当年第几天 样例输入 2000 12 31 样例输出 366 来源/分类 C语言 题目截图 ...

  6. go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量

    "要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人-万中无一" --包租婆这道理放在C语言学习上也一并受用.在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语 ...

  7. 5/29 c的结构体变量

    1.结构体变量的初始化和引用. 在定义结构体变量的时候,可以对它初始化,即赋予初始值.然后再引用这个变量. (1)在定义结构体变量时可以对它的成员初始化.初始化列表是用花括号括起来的一些常量,这些常量 ...

  8. 结构体怎么赋值_Go 经典入门系列 16:结构体

    点击上方蓝色"Go语言中文网"关注,每天一起学 Go 欢迎来到 Golang 系列教程的第 16 个教程. 什么是结构体? 结构体是用户定义的类型,表示若干个字段(Field)的集 ...

  9. 【C 语言】结构体 ( 结构体变量内存操作 | 通过 “ . “ 操作符操作结构体内存空间 | 通过 “ -> “ 操作符操作结构体内存空间 )

    文章目录 一.通过 " . " 操作符操作结构体内存空间 二.通过 " -> " 操作符操作结构体内存空间 三.代码示例 一.通过 " . &q ...

最新文章

  1. MySQL 的 find_in_set函数使用方法
  2. 论文《一种金融市场预测的深度学习模型:FEPA》(2)----有效市场假说,预测原则概念及自己的思考
  3. 你需要启用steam社区界面功能以进行购买_绝地求生购买衣服方法
  4. azure mysql 只读节点_Azure MySQL PaaS 创建MySQL异地只读数据库 (Master-Slave)
  5. 理解C++ lvalue与rvalue
  6. 在DZ 中 showmessage 中可以再次执行 JS
  7. Spring 自动装配模式之byType
  8. python判断题题库大数据技术_智慧树_大数据分析的python基础_搜题公众号
  9. 若川邀你进 源码共读 群~长期交流学习
  10. fcntl函数之文件锁 F_SETLK
  11. lingo的初步使用(集)
  12. 300小时人工智能学习视频课程,从数理基础到爬虫实战!
  13. [转] Java之ACM速成
  14. cat6 万兆_超六类屏蔽网线CAT6AF/FTP10G万兆过测试工程网线益朗通信科技冀州
  15. 【其他】电脑ADB连接手机的方式
  16. python常见的json对象对比方法(deepdiff、json_tools、jsonpatch)
  17. webstorm 2017 激活破解方法大全
  18. 当遇到error: stray ‘\241‘ in program错误的解决方法
  19. 网页的登录和注册页面
  20. C++顺序栈的实现(进栈,出栈,判断栈空,打印输出,获取栈顶元素)

热门文章

  1. 一种基于中继模式的跨链通信方案
  2. 什么是钉钉消息推送?
  3. 虚拟+现实:半实物仿真测试和全数字仿真测试有效保证嵌入式系统的健壮与可靠
  4. 佛说:你给别人的一切,都会回到你自己身上。
  5. netty之微信-Netty 是什么?(三)
  6. Nginx防止恶意域名解析
  7. Spring自定义数据源配置不当引起的Mybatis拦截器Interceptors 失效/不生效
  8. PCB 传输线教程(上):基于 Polar Si9000 与嘉立创工艺的传输线设计
  9. VB编程:利用循环嵌套求1000以内的完数-18
  10. Go Web 编程 (一) - 快速入门