对于结构体变量赋值的误区
来源:互联网 发布:python array转置 编辑:程序博客网 时间:2024/04/27 16:03
以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对。于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题。还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不对,原因就和之前他理解的一样。
于是晚上到住处在网上查了一下,说是可以的,因为是同样的数据类型,而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;
}
- 对于结构体变量赋值的误区
- 对于结构体变量赋值的误区
- 对于结构体变量赋值的误区
- 结构体变量的赋值
- 结构体变量的赋值方法
- 结构体变量的初始化和赋值
- 结构体变量的引用和赋值
- Smarty对于未赋值变量的处理?!
- ES6变量的结构赋值
- 不同结构体类型变量之间的赋值
- 结构体变量之间的比较和赋值原理
- C语言结构变量的赋值
- ES6中变量的结构赋值作用
- ES6-变量的结构赋值-数组
- ES6-变量的结构赋值-对象
- ES6-变量的结构赋值-字符串
- ES6-变量的结构赋值-函数参数
- ES6-变量的结构赋值-汇总
- Matlab: 怎样从一个字符串元组cell_str 中找到某个特定的字符串
- 如何让枯燥的表单数据也可以变得有趣
- 写在情人节的小程序
- <ilike就业Visual Basic多功能教材>即将出版,电子工业出版,欢迎大家提出批评意见。
- AspJpeg2.0组件教程完整版 aspjpeg教程
- 对于结构体变量赋值的误区
- HTC G14 Sensation 新手刷机详细教程 获取root权限
- 待整理
- php循环检测目录是否存在并创建(循环创建目录)
- [Three20] 如何加入Three20到项目中
- 英糖果工厂有多对恋人雇员 自称最浪漫工作场所
- Linux Object-C 编译环境安装
- Ubuntu 10.04后的设置代理
- 实用PHP会员权限控制实现原理分析