在C语言中。结构体变量之间可以相互赋值吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C语言中。结构体变量之间可以相互赋值吗?相关的知识,希望对你有一定的参考价值。
可以直接赋值。定义结构体类型,然后用这个类型定义出来的变量就是结构体变量。
C语言在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,这里因为同样结构体变量,属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。
举例:
voidmain()
{
STUstu1={0,10};
STUtemp={12,88};
STU*p1=&stu1;
STU*p2=&temp;
printf("%d-%d\n",temp.name,temp.num);
temp=stu1;
printf("%d-%d\n",temp.name,temp.num);
temp={10,10};
printf("%d-%d\n",stu1->name,stu1->num);
printf("%ld-\n",&stu1);
printf("%ld-\n",stu1);
printf("%ld-\n",&temp);
printf("%ld-\n",temp);
change(stu1,temp);
temp=stu1;
p2=p1;
printf("%d-%d\n",p2->name,p2->num);
}
扩展资料:
C语言中变量间互相赋值很常见,例如:
inta,b;
a=b;
结构体也是变量(自定义变量),两个结构体之间直接赋值按道理应该也是可以的吧,将一个结构体对象赋值给另一个结构体对象的。
例:
#include"stdio.h"
structtest
{
inta;
intb;
intc;
char*d;
};
intmain()
{
structtestt1={1,2,3,"tangquan"};
structtestt2={0,0,0,""};
printf("%d,%d,%d,%s\r\n",t2.a,t2.b,t2.c,t2.d);
t2=t1;
printf("%d,%d,%d,%s\r\n",t2.a,t2.b,t2.c,t2.d);
return0;
}
参考技术A 1、结构体变量是可以直接赋值的。定义结构体类型,然后用这个类型定义出来的变量就是结构体变量。2、C语言在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,这里因为同样结构体变量,属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。 参考技术B 可以的,同类型的结构体变量可以。比如:
struct test a,b;
a=b;//这样可以的。
如果是不同的类型,但是结构体没数据类型一样就要用memcpy拷贝内存(头文件string.h)。例如:
struct test1 a;本回答被提问者采纳
C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的。
所以,在C语言中两个相同类型的结构体变量之间是可以相互赋值的。但是要注意指针的浅层复制问题。
下面是一个简单的验证代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdlib.h> struct test { int a; int b; char ss[10]; }; struct test2 { int a; int b; char * ss; }; int main() { struct test t1 = {1, 2, "hello"}; struct test t2; t2 = t1; strcpy(t1.ss,"张汉青"); printf("%d, %d, %s\n", t2.a, t2.b, t2.ss); struct test2 t3; t3.ss = (char *)malloc(10); t3.a=1; t3.b=2; strcpy(t3.ss,"hello"); struct test2 t4; t4=t3; strcpy(t3.ss,"张汉青"); printf("%d,%d, %s\n",t4.a,t4.b,t4.ss); return 0; }
希望对你有所帮助,如有不正确的地方,还请指教。。多谢~~
以上是关于在C语言中。结构体变量之间可以相互赋值吗?的主要内容,如果未能解决你的问题,请参考以下文章