两个哈希表数据结构之间能相互赋值吗

C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。所以,在C语言中两个相同类型的结构体变量之间是可以相互赋值的。但是要注意指针的浅层复制问题。下面是一个简单的验证代码:
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#include &stdlib.h&
struct test
char ss[<span style="color: #];
struct test2
int main()
struct test t1 = {<span style="color: #, <span style="color: #, "hello"};
struct test t2;
strcpy(t1.ss,"张汉青");
printf("%d, %d, %s\n", t2.a, t2.b, t2.ss);
struct test2 t3;
t3.ss = (char *)malloc(<span style="color: #);
t3.a=<span style="color: #;
t3.b=<span style="color: #;
strcpy(t3.ss,"hello");
struct test2 t4;
strcpy(t3.ss,"张汉青");
printf("%d,%d, %s\n",t4.a,t4.b,t4.ss);
return <span style="color: #;
希望对你有所帮助,如有不正确的地方,还请指教。。多谢~~
阅读(...) 评论()c语言中,两个形式相同的“结构数组”可以直接相互赋值吗?
[问题点数:20分,结帖人l3533630]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:76866
2007年4月 C/C++大版内专家分月排行榜第二2007年3月 C/C++大版内专家分月排行榜第二2007年2月 C/C++大版内专家分月排行榜第二2007年1月 C/C++大版内专家分月排行榜第二2006年12月 C/C++大版内专家分月排行榜第二
2007年9月 C/C++大版内专家分月排行榜第三2007年8月 C/C++大版内专家分月排行榜第三2006年11月 C/C++大版内专家分月排行榜第三
本版专家分:0
本版专家分:9703
2014年1月 C/C++大版内专家分月排行榜第三
本版专家分:0
本版专家分:4216
本版专家分:0
本版专家分:14562
本版专家分:0
本版专家分:159
本版专家分:46
本版专家分:0
匿名用户不能发表回复!|
其他相关推荐
思考一下对指针赋值为0会产生什么结果?
用编译器试验了一下 会得到一个空指针!
其实这种现象在C语言中是有定义的。
值为0的整形常数表达式或强制转换为void *类型的表达式可通过强制类型转换、赋值或比较操作转换为任意类型的指针。其结果将产生一个空指针。
印象中,C中的结构体是不能用等号运算符赋值的,以前写的程序对两个结构体内容交换的时候,都是单独建立一个swap函数来对两个结构体的各个成员逐一交换。然而,查阅资料加实践后,发现=是可以用来给结构体赋值的。首先来看一下文献:C99标准§6.7.2.1上说:
struct s { double d[]; };
struct s *s1;
struct s *s2;
%f是浮点数,输出f中保存的浮点数
%10f表示输出浮点数f中的前10位
%10.2f表示场宽为10,其中有2位小数
%.2f表示输出2位小数
%-10.2f同10.2f,但输出之后左对齐,而不是右对齐。
浮点数存储误差关键取决于浮点数存储的性质,它实际上是通过一组2的幂相加之和来存储一个数字,所以理论上是不会完全精准的。但不同编译器可能也有不同的解析,具体更细节的部分建议你参照一下相关
C语言中结构体可以直接赋值,
1:在定义结构体变量时,可根据结构体格式赋值。
2:在运算过程中,一个结构体可以直接赋值给另外一个结构体。
3:结构体指针不能直接被赋值,包括结构体指针下面的结构体(也就是说结构体直接赋值过程中不能出现指针形式的变量)。
例如下面:
int main()
int a,b,c;
此文转载至
大家知道C++文件一般包含.cpp文件和.h文件,当两个类相互在头文件中包含对方的头文件的时候编译器会报错的。如下例子:
class object1 的头文件object1.h
#include&object2.h&
class object1
class object2 的头文件object2
指针,间接赋值
#include &iostream&
#include &string&
class Home{
//空的构造函数
string show(){
//公有的方法
cout && father
C语言中变量间互相赋值很常见,例如:int a,b;
a =结构体也是变量(自定义变量),两个结构体之间直接赋值按道理应该也是可以的吧,说实话之前还从没遇到过将一个结构体对象赋值给另一个结构体对象的(见识太浅),那么下面做一个测试看看:#include &stdio.h&struct test
for( int i=0;i&100;i++)
printf(“%d”,a);
如上这个程序中,重复定义了两遍int i=0;那么编译器就会报错,报错都是乱报的错误,因为在同一个函数中给同一个变量名重复定义两次,编译器则无法识别,好比两个房子安装了同样的门,那么我们则无法区别这两个房子。(一)前言
当不同命名空间下的两个类具有相同的属性,并且需要进行相互赋值时,如下图中的Jasen.Core.Info类的实例与Jasen.Core.Test.Info类的实例需要相互赋值时,按照一般的思路直接赋值就可以了。通常,这种情况在调用Web Service的时候比较常见。当需要转换的类很多时,亦或者需要转换的属性很多时,我们就需要根据一定的规则来对这种场景来进行设计了,谁也不会傻布拉吉的一个一个属性的去给对象赋值。
&(二)ObjectMapper&类负责对象之间相对应的属性间的赋值
&1&///&&summary&&2&&&&&///&&3&&&&&///&&/summary&&4&&&&&public&class&ObjectMapper&&&5&&&&&{&6&&&&&&&&&///&&summary&&7&&&&&&&&&///&&8&&&&&&&&&///&&/summary&&9&&&&&&&&&///&&param&name="sourceType"&&/param&<span style="color: #&&&&&&&&&///&&param&name="targetType"&&/param&<span style="color: #&&&&&&&&&///&&returns&&/returns&<span style="color: #&&&&&&&&&public&static&IList&PropertyMapper&&GetMapperProperties(Type&sourceType,&Type&targetType)<span style="color: #&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&var&sourceProperties&=&sourceType.GetProperties();<span style="color: #&&&&&&&&&&&&&var&targetProperties&=&targetType.GetProperties();<span style="color: #&<span style="color: #&&&&&&&&&&&&&return&(from&s&in&sourceProperties<span style="color: #&&&&&&&&&&&&&&&&&&&&&from&t&in&targetProperties<span style="color: #&&&&&&&&&&&&&&&&&&&&&where&s.Name&==&t.Name&&&&s.CanRead&&&&t.CanWrite&&&&s.PropertyType&==&t.PropertyType<span style="color: #&&&&&&&&&&&&&&&&&&&&&select&new&PropertyMapper<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&SourceProperty&=&s,<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&TargetProperty&=&t<span style="color: #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}).ToList();<span style="color: #&&&&&&&&&}&&&&&&&<span style="color: #&<span style="color: #&&&&&&&&&///&&summary&<span style="color: #&&&&&&&&&///&<span style="color: #&&&&&&&&&///&&/summary&<span style="color: #&&&&&&&&&///&&param&name="source"&&/param&<span style="color: #&&&&&&&&&///&&param&name="target"&&/param&<span style="color: #&&&&&&&&&public&static&void&CopyProperties(object&source,&object&target)<span style="color: #&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&var&sourceType&=&source.GetType();<span style="color: #&&&&&&&&&&&&&var&targetType&=&target.GetType();<span style="color: #&&&&&&&&&&&&&var&mapperProperties&=&GetMapperProperties(sourceType,&targetType);<span style="color: #&<span style="color: #&&&&&&&&&&&&&for&(int&index&=&<span style="color: #,count=mapperProperties.C&index&&&&index++)<span style="color: #&&&&&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&&&&&var&property&=&mapperProperties[index];<span style="color: #&&&&&&&&&&&&&&&&&var&sourceValue&=&property.SourceProperty.GetValue(source,&null);<span style="color: #&&&&&&&&&&&&&&&&&property.TargetProperty.SetValue(target,&sourceValue,&null);<span style="color: #&&&&&&&&&&&&&}<span style="color: #&&&&&&&&&}<span style="color: #&&&&&}
public&static&void&CopyProperties(object&source,&object&target)方法将源对象的属性值赋给目标对象的属性。其中必须满足以下条件:s.Name&==&t.Name&&&&s.CanRead&&&&t.CanWrite&&&&s.PropertyType&==&t.PropertyType,也就是两个对象之间赋值的属性名,属性类型必须相同,而且源对象的属性必须可读,目标对象的属性可写。
public&static&IList&PropertyMapper&&GetMapperProperties(Type&sourceType,&Type&targetType)方法通过LINQ将源对象和目标对象相对应的属性对放置在List&PropertyMapper&集合中,每一个PropertyMapper对应一个SourceProperty和TargetProperty。PropertyMapper类如下:
&1&///&&summary&&2&&&&&///&&3&&&&&///&&/summary&&4&&&&&public&class&PropertyMapper&5&&&&&{&6&&&&&&&&&///&&summary&&7&&&&&&&&&///&&8&&&&&&&&&///&&/summary&&9&&&&&&&&&public&PropertyInfo&SourceProperty<span style="color: #&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&get;<span style="color: #&&&&&&&&&&&&&set;<span style="color: #&&&&&&&&&}<span style="color: #&<span style="color: #&&&&&&&&&///&&summary&<span style="color: #&&&&&&&&&///&<span style="color: #&&&&&&&&&///&&/summary&<span style="color: #&&&&&&&&&public&PropertyInfo&TargetProperty<span style="color: #&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&get;<span style="color: #&&&&&&&&&&&&&set;<span style="color: #&&&&&&&&&}<span style="color: #&&&&&}
最后循环来遍历List&PropertyMapper&集合,通过反射进行赋值,主要代码如下:
&&&&&&&&&&&&&&&& for&(int&index&=&<span style="color: #,count=mapperProperties.C&index&&&&index++)<span style="color: #&&&&&&&&&&&&&{<span style="color: #&&&&&&&&&&&&&&&&&var&property&=&mapperProperties[index];<span style="color: #&&&&&&&&&&&&&&&&&var&sourceValue&=&property.SourceProperty.GetValue(source,&null);<span style="color: #&&&&&&&&&&&&&&&&&property.TargetProperty.SetValue(target,&sourceValue,&null);<span style="color: #&&&&&&&&&&&&&}
&(三)单元测试
&1&&&&&&&& [TestMethod()]&2&&&&&&&&&public&void&CopyPropertiesTest()&3&&&&&&&&&{&4&&&&&&&&&&&&&Jasen.Core.Info&source&=&new&Jasen.Core.Info()&5&&&&&&&&&&&&&{&6&&&&&&&&&&&&&&&&&Name&=&"jasen",&7&&&&&&&&&&&&&&&&&CreateTime&=&"<span style="color: #11-3-31".AsDateTime(),&8&&&&&&&&&&&&&&&&&Exist&=&true,&9&&&&&&&&&&&&&&&&&ConflictOption&=&ConflictOption.OverwriteChanges<span style="color: #&&&&&&&&&&&&&};<span style="color: #&&&&&&&&&&&&&Info&target&=&new&Info();&&<span style="color: #&&&&&&&&&&&&&ObjectMapper.CopyProperties(source,&target);<span style="color: #&<span style="color: #&&&&&&&&&&&&&Assert.AreEqual(source.ConflictOption,target.ConflictOption);<span style="color: #&&&&&&&&&&&&&Assert.AreEqual(source.CreateTime,&target.CreateTime);<span style="color: #&&&&&&&&&&&&&Assert.AreEqual(source.Exist,&target.Exist);<span style="color: #&&&&&&&&&&&&&Assert.AreEqual(source.Name,&target.Name);<span style="color: #&&&&&&&&&}
当然,当需要转换的对象很多时,可以采用字典Dictionary来提高性能,Dictionary主要用来保存对象对应属性间的List&PropertyMapper&关系,当下次再次调用时候就不需要再次获取对象对应属性间的List&PropertyMapper&关系了。
阅读(...) 评论()在C语言中。结构体变量之间可以相互赋值吗?_百度知道
在C语言中。结构体变量之间可以相互赋值吗?
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
tattackor知道合伙人
来自电脑网络类芝麻团
采纳数:1497
获赞数:18879
参与团队:
1、结构体变量是可以直接赋值的。定义结构体类型,然后用这个类型定义出来的变量就是结构体变量。2、C语言在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,这里因为同样结构体变量,属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。
TA0000449知道合伙人
获赞数:16
擅长:暂未定制
可以的,同类型的结构体变量可以。比如:struct test a,b;a=b;//这样可以的。如果是不同的类型,但是结构体没数据类型一样就要用memcpy拷贝内存(头文件string.h)。例如:struct test1
本回答被提问者采纳
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。22:00 提问
两个指针变量可以相互赋值吗?
int *p, *q;
这样写是什么意思?是p指向q吗?
按赞数排序
两个指针变量之间可以相互赋值,p和q都是int类型的指针。
p=q表示将q所指向的int类型变量的地址赋给p
两个都是指针,所以是p的值等于q
如果p不是指针,那么p=*q是p等于q指向的值
可以这样写,前提好像是*q有确定的地址指向,然后用次语句赋值则表示,指针p和指针q指向相同的地址空间。
指针也只不过是一个变量而已,只不过里面存放的是地址
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
指针变量是有加减运算的,但是要注意以下几点:
-----------摘自《c和指针》6.9指针常量----------------------------------------------------------------------------------------------------------------------------------
假定变量a存储于位置100,下面这条语句的作用是什么?
*100 =25;
C语言,将数组放到结构(类)中,就可以通过结构之间的直接赋值,间接实现了数组赋值了。如果是C++,用重载赋值符号也可以。
对于类型相同的指针变量之间不能够进行加法运算,但可以进行减法运算。还可以使用&#39;&#39;、&#39;==&#39;这三个运算符进行比较,主要用于判断指针指向数组元素的先后位置。
以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对。于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题。还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不
String主要有这么两种赋值方式:一、类似普通对象,通过new创建字符串对象。String str = new String(&abc&);二、类似原型那样直接赋值。如String str = &abc&; 这两种赋值方式有什么不同,估计很多人也多少有些了解?下面我们主要围绕几个问题展开:1、为什么String可以不用new就可以创建对象?2、这两种赋值方式有什么不同?
C/C++ code
char* p1=&abcdefg&;
strcpy(p2,p1);
strcpy(p2,p1);
这两个语句有什么区别??
两个指针变量不可以做什么
D:指向同一地址
编译器禁止内建指针进行加法运算,因为那是无意义的:如果作为整数相加,无法找到结果的有效语义。
指针减法的结果表示相隔元素数。
指针的值实现为线性地址,是有序的,可以像整数一样比较。
不同指针可以指向同一对象,它们的值可以相等。指针相当于一个地址,用所在字节的位置标注地址,直接输出可得到一个数字。
#include &iostream&
#include &string&
class Home{
//空的构造函数
string show(){
//公有的方法
cout && father
整数与整数之间
一、长度相等(在内存中存储的位数相等)的两个不同的类型的数据之间的赋值
在计算机中的存储内容不变,只是数据按照不同的编码格式来解析。二、长 赋值给 短
(短 = 长)
截取低位,然后按照短整数的数据类型解析。三、短 赋值给 长
(长 = 短)
其中,短转长又分为三种情况:
1. 两个数据都是无符号的数据,短整数直接高位补0。
2. 两个数据都是有符号的数据,短整数进行符号

我要回帖

更多关于 指针可以相互赋值吗 的文章

 

随机推荐