结构体复制与赋值

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <malloc.h>
 4
 5 int main(int argc, char* argv[])
 6 {
 7     struct data
 8     {
 9         int i;
10         char c;
11         int j;
12         int arr[2];
13     };
14
15
16     struct datawptr
17     {
18         int i;
19         char *c;
20     };
21
22     struct datawptr dptr1;
23     struct datawptr dptr2;
24     struct data svar1; // a normal variable of type struct data
25     struct data svar2; // a normal variable of type struct data
26
27     svar1.c = ‘a‘;
28     svar1.i = 1;
29     svar1.j = 2;
30     svar1.arr[0] = 10;
31     svar1.arr[1] = 20;
32
33     svar2 = svar1;
34     printf("Value of second variable \n");
35     printf("Member c = %c\n", svar2.c);
36     printf("Member i = %d\n", svar2.i);
37     printf("Member j = %d\n", svar2.j);
38     printf("Member arr0th = %d\n", svar2.arr[0]);
39     printf("Member arr1st = %d\n", svar2.arr[1]);
40
41     dptr1.i = 10;
42     dptr1.c = (char*)malloc(sizeof(char));
43     *(dptr1.c) = ‘c‘;
44     dptr2.c = (char*)malloc(sizeof(char));
45     dptr2 = dptr1;
46
47     /* But, with
48 the above approach, one needs to be careful when a data structure contains a member of pointer type because the
49 assignment operator simply copies the value; it will also copy the pointer variable’s value, which is nothing but the
50 address of some variable it is pointing to.  */
51
52     printf("int member = %d\n", dptr2.i);
53     printf("char ptr member = %c\n", *(dptr2.c));
54
55     return 0;
56 }
57
58 /*
59 Value of second variable
60 Member c = a
61 Member i = 1
62 Member j = 2
63 Member arr0th = 10
64 Member arr1st = 20
65 int member = 10
66 char ptr member = c
67 */

原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/9607281.html

时间: 2024-08-13 04:57:03

结构体复制与赋值的相关文章

c结构体复制问题

前段时间自己遇到的一个问题,跟大家分享一下. 在写代码的时候,遇到结构体复制的问题,即将一个结构体里的变量值完全复制给另一个结构完全相同的结构体. 我所使用的是memcpy,结果发现,拷贝完后,新结构体里的变量值仍然不存在,最后只能单个变量复制. 值得注意的是,我的结构体里包含指针型变量,所以在复制时,需要给它开辟新的空间,单独拷贝. 如果大家有比较好的结构体拷贝方法(含有指针),一定要告诉我啊O(∩_∩)O c结构体复制问题,布布扣,bubuko.com

C语言中结构体变量之间赋值

最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉.对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式.如下的代码示例: 如上代码所示,tEmployeeInfoSrc和tEmployeeInfoDest是两个类型相同的结构体变量,tEmployeeInfoSrc(源结构体变量)中的各个成员变量已赋初值.现要使tEmployeeInfoDest(目的结构体变量)中的各个成员变量的值与tEmployeeInfoSrc中对应成员变量的值相同.小刘采用的

结构体中指针赋值问题的分析及C代码示例

问题描述 某结构体的定义如下: typedef struct { int iAge; // 年龄 char szAddr1[100]; // 地址1 char *pszAddr2; // 地址2 char **pszAddr3; // 地址3 } T_PeopleInfo; 请问如何对结构体中的各个成员变量(尤其是指针变量)进行赋值? 问题分析及C代码示例 我们可以看到,在结构体T_PeopleInfo中,pszAddr2和pszAddr3均为指针,其中pszAddr2为一级指针,pszAddr

函数外面对单个结构体成员进行赋值出错

关于"为什么整型的就可以,结构体类型的就不能这么赋值呢?"--整形等常规数据类型由编译器自动识别,而自定义的数据类型(楼主自定义的结构体类型),编译器在编译阶段无法识别,故出错. 关于"在函数外单个初始化"--在入口函数(main函数)之前定义变量及初始化,得到的是全局变量.编译器对程序进行编译时,必须先构造或者创建全局变量,为全局变量分配内存,再找入口函数:而在创建全局变量时,该变量类型(楼主自定义的结构体)编译器无法识别,故无法创建该全局变量. 进入main函数

结构体全局变量成员赋值

struct s { int a; }; s g; g.a = 1; // 编译错误 void f() { g.a = 1; // 编译正确 } 为什么全局结构体变量成员只能在函数内调用? 因为g.a=1是赋值语句,不是初始化语句,赋值语句只能运行的时候可以执行.

对于结构体变量赋值的误区

以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不能直接赋值,要内存拷贝,从这里推理所以认为这个语句不对.于是问了一下,我当时以为是结构体指针变量的赋值,认为没有问题.还和同事争论了一番,当他让我看源代码时,发现是变量间的直接赋值,下意识中的判断是不对,原因就和之前他理解的一样. 于是晚上到住处在网上查了一下,说是可以的,因为是同样的数据类型,而C

同类型结构体之间赋值不一定有效

同类型结构体之间赋值不一定有效 今天为这个问题debug好久... 之前看到一个关于结构体使用的技巧, 这个技巧能够避免内存零碎. 保证结构体所属内存尽量不要零散化. struct struct_name { element_type varible; ...; element_type  pointer[0]; } 关于该用法的介绍. http://blog.csdn.net/cinmyheart/article/details/28985843 对于普通的结构体, struct num {

C和指针 第十二章 结构体 整体赋值 error: expected expression

定义结构体后整体赋值时发生错误 typedef struct NODE { struct NODE *fwd; struct NODE *bwd; int value; } Node; //声明变量 Node first; first = {NULL, &second, 4}; 错误: error: expected expression 之所以不行是,{}内容被当做语句块了,c语言允许直接对结构体初始化,或者在赋值的时候加上类型说明,或者是逐一赋值. 初始化赋值: typedef struct

C语言中结构体赋值问题的讨论(转载)

今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言中结构体赋值的问题吧: 结构体直接赋值的实现 下面是一个实例: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three different field