精华内容
下载资源
问答
  • 结构体变量赋值给同类型的结构体变量     备注:程序遗漏返回值(可以正常编译),代码最后需要加return 0;。...

                                                                    结构体变量赋值给同类型的结构体变量

     

     

    备注:程序遗漏返回值(可以正常编译),代码最后需要加return 0;。

    展开全文
  • C++ 结构体对象直接赋值

    千次阅读 2020-03-07 22:55:10
    一、特点 深拷贝,拷贝后的两个对象互不影响干扰 二、示例 #include <iostream> typedef struct _Te_Resource_Param_ //定义两个字符数组,为了验证是深拷贝还是浅拷贝 { char pcPath[256];...

    一、特点
    深拷贝,拷贝后的两个对象互不影响干扰
    二、示例

    #include <iostream>
    
    typedef struct __TEST__ 
    {
    	char first[256];
    	char second[256];
    }Test;
    
    int main()
    {
    	Test t2;
    	{
    		Test t;
    		strcpy_s(t.first, "hello");
    		strcpy_s(t.second, "world"); 
    
    		t2 = t;                    
    		std::cout << "t.pcName: " << t.first << " t.pcPath: " << t.second << std::endl;
    	}
    	
    	std::cout << "t2.pcName: " << t2.first << " t2.pcPath: " << t2.second << std::endl;
    
    	return 0;
    }
    
    展开全文
  • c语言结构体可以直接赋值

    千次阅读 2018-12-26 16:56:29
    结构体直接赋值的实现 下面是一个实例: #include &lt;stdio.h&gt; struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three different fields void struct_assign...

    结构体直接赋值的实现

    下面是一个实例:

    #include <stdio.h>
    
    struct Foo {
        char a;
        int b;
        double c;
    }foo1, foo2;          //define two structs with three different fields
    
    void struct_assign(void)
    {
        foo2 = foo1;       //structure directly assignment
    }
    
    int main()
    {
        foo1.a = 'a';
        foo1.b = 1;
        foo1.c = 3.14;
        struct_assign();
        printf("%c %d %lf\n", foo2.a, foo2.b, foo2.c);
    
        return 0;   
    }
    

    我在Ubuntu 13.04下使用gcc 4.7.3 编译运行得到的结果,如下所示:

    guohl@guohailin:~/Documents/c$ gcc struct_test1.c -o struct_test1
    guohl@guohailin:~/Documents/c$ ./struct_test1 
    a 1 3.140000
    

    可以从结果上看出,结构体直接赋值在C语言下是可行的,我们看看struct_assign()函数的汇编实现,从而从底层看看C语言是如何实现两个结构体之间的赋值操作的:

    struct_assign:
        pushl   %ebp
        movl    %esp, %ebp
        movl    foo1, %eax
        movl    %eax, foo2      //copy the first 4 bytes from foo1 to foo2
        movl    foo1+4, %eax
        movl    %eax, foo2+4    //copy the second 4 bytes from foo1 to foo2       
        movl    foo1+8, %eax
        movl    %eax, foo2+8    //copy the third 4 bytes from foo1 to foo2  
        movl    foo1+12, %eax
        movl    %eax, foo2+12   //copy the forth 4 bytes from foo1 to foo2  
        popl    %ebp
        ret
    

    这段汇编比较简单,由于结构体的对齐的特性,sizeof(srtruct Foo)=16,通过四次movl操作将foo1的结构体内容拷贝到结构体foo2中。从汇编上看出,结构体赋值,采用的类似于memcpy这种形式,而不是逐个字段的拷贝。

    复杂结构体的赋值

    如果结构体中含有其它复杂数据类型呢,例如数组、指针、结构体等,从上面的汇编实现可以看出,只要两个结构体类型相同,就可以实现赋值,如下例:

    #include <stdio.h>
    
    struct Foo {
        int n;
        double d[2];
        char *p_c;
    }foo1, foo2;
    
    int main()
    {
        char *c = (char *) malloc (4*sizeof(char));
        c[0] = 'a'; c[1] = 'b'; c[2] = 'c'; c[3] = '\0';
    
        foo1.n = 1;
        foo1.d[0] = 2; foo1.d[1] = 3;
        foo1.p_c = c;
    
        foo2 = foo1;     //assign foo1 to foo2
    
        printf("%d %lf %lf %s\n", foo2.n, foo2.d[0], foo2.d[1], foo2.p_c);
    
        return 0;
    }
    

    运行结果如下:

    guohl@guohailin:~/Documents/c$ gcc struct_test2.c -o struct_test2
    guohl@guohailin:~/Documents/c$ ./struct_test2
    1 2.000000 3.000000 abc
    

    可以看出结果和我们想象的是一样的。再次验证结构体的赋值,是直接结构体的内存的拷贝!但正是这个问题,如上面的实例,foo1 和 foo2 中p_c 指针都是指向我们申请的一块大小为4个字节的内存区域,这里注意的是,结构体的拷贝只是浅拷贝,即指针p_c的赋值并不会导致再申请一块内存区域,让foo2的p_c指向它。那么,如果释放掉foo1中的p_c指向的内存,此时foo2中p_c变成野指针,这是对foo2的p_c操作就会出现一些不可预见的问题!在C++中引入了一种可以允许用户重载结构体赋值操作运算,那么我们就可以根据语义重载赋值操作。

    数组是二等公民

    二等公民在维基百科上的解释是:

    二等公民不是一个正式的术语,用来描述一个社会体系内对一部分人的歧视或对外来人口的政治限制,即使他们作为一个公民或合法居民的地位。 二等公民虽然不一定是奴隶或罪犯,但他们只享有有限的合法权利、公民权利和经济机会,并经常受到虐待或忽视。法律无视二等公民,不向他们提供保护,甚至在制订法律时可能会根本不考虑他们的利益。划分出二等公民的行为,普遍被视为一种侵犯人权的行为。 典型的二等公民所面临的障碍包括但不仅限于(缺乏或丧失表决权):权利被剥夺,限制民事或军事服务(不包括任何情况下的征兵),以及限制,语言,宗教,教育,行动和结社的自由,武器的所有权,婚姻,性别认同和表达,住房和财产所有权 。

    从词条上解释可以看出二等公民与一等公民在权利上是有差别的,这个词很有意思作为计算机专业术语,其含义也有异曲同工之妙!同样我们看看维基百科对计算机的术语”first-class citizen"(一等公民)的定义,一般要满足以下几点,

    • can be stored in variables and data structures
    • can be passed as a parameter to a subroutine
    • can be returned as the result of a subroutine
    • can be constructed at run-time
    • has intrinsic identity (independent of any given name)

    对比着上面的定义来看C语言数组,数组作为一个函数的参数传递时,退化成一个指针; 同时,数组无法作为函数的返回值; 也许让数组更不服气的是,数组之间不能直接赋值操作,如下面的操作就是非法的:

    int a[10];
    int b[10];
    a = b;
    

     转自:http://www.cnblogs.com/vanishfan/p/6891362.html

     

    展开全文
  • //这样是错误的,这是全局变量赋值,是错误的。 int main() { return 0; } 例2: int a; a =1; //这样是错误的,这是全局变量赋值,是错误的。 int main() { } 例3: int a ...

    如题:

    例1:
    
    typedef struct{
    
    int a ;
    
    int b;
    
    }TEST;
    
    TEST test1;
    
    test1.a = 1;    //这样是错误的,这是全局变量的赋值,是错误的。
    
    int main()
    
    {
    
    return 0;
    
    }
    
    例2:
    
    int a;
    
    a =1;   //这样是错误的,这是全局变量的赋值,是错误的。
    
    int main()
    
    {
    
    }
    
    例3:
    
    int a =1; //这样是正确的,这是全局变量的初始化,是可以的。
    
    int main()
    
    {
    
    }

    原因,如该博文所述。

    类内函数体外只能定义全局变量和对象,不能执行语句或调用函数。

    上述中,实际是在函数体外执行语句,故错误。

    https://blog.csdn.net/weixin_44997676/article/details/106602594?

    这与全局变量数组函数体内不能一起赋值情况是否相同?

    展开全文
  • 结构体变量赋值

    千次阅读 2014-07-25 09:52:33
    以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不...
  • 结构体变量赋值

    2020-02-22 15:21:51
    结构体内变量赋值暂且分为三种(笔者此时只能想到三种) 1.定义时赋值 2.定义后对变量挨个赋值 3.利用函数进行赋值 赋值时再分为两类 1.非数组赋值 2.数组赋值 1.比较简单,在此不做过多介绍,只是简单贴下代码。 ...
  • 对于两个同样类型的结构体变量,他均採用的是逐个成员变量直接赋值的形式。例如以下的代码演示样例: 如上代码所看到的,tEmployeeInfoSrc和tEmployeeInfoDest是两个类型同样的结构体变量,tEmployeeInfoSrc(源...
  • C语言中结构体直接赋值? 茫茫大士2018-10-21 10:47:2959954已收藏1 分类专栏:嵌入式文章标签:结构体c FROM:http://codewenda.com/c语言结构体直接赋值/ 在C语言中结构体变量之间可以进行赋值操作吗? 简单...
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month; u8 day; ...1)C语言中,在相同类型的变量间赋值时是直接内存复制的;...2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
  • C语言的几种结构体Struct的赋值方法

    万次阅读 2019-11-28 09:18:24
    C语言的几种几种结构体Struct的初始化方法 ...1.3 直接定义结构体变量 这里是定义结构体类型。 #include <stdio.h> struct Init{ int a; double b; char *c; }; 1.1声明时初始化 在声明结构...
  • 两个结构体变量的相互赋值

    千次阅读 2019-01-04 17:09:55
    下面开始讨论两个结构体变量的类型相同,即同一种类型的结构体赋值 package main import ( "fmt" "encoding/json" ) type Foo1 struct { id int m map[int]string } func main() { //funcName() //...
  • 以前在使用结构体时没有在结构体变量之间直接赋值,今天同事在查看别人的代码时,发现有两个结构体变量直接赋值的语句当时感觉这个语句不对,认为在一个结构体里边,既有一般的无符号整形与数组,因为数组的赋值是不...
  • 今天做一个项目,用到了结构体变量的赋值,但是却一直得不到想要的结果,仔细检查代码,发现了两个和我想的不同的地方: 1、发现是结构体变量间... 两个同类型的结构体变量直接赋值,可以将一个结构体变量的所有元
  • C++ 结构体可以直接赋值

    万次阅读 2017-11-25 15:40:46
    一直记得C语言中,结构体是不可以直接赋值的,需要逐一成员赋值或者用memcpy函数。 但是在C++中可以(无需重载=运算符),需要区分以下3种情况: #include #include using namespace std; ...
  • 简单来说,就是没有指针的结构体可以直接赋值,有指针的,赋值的只是地址,没有重新开辟空间,需要一个个开辟空间赋值。
  • 结构体变量之间的比较和赋值原理

    万次阅读 2018-09-08 09:27:25
    结构体变量之间可以直接赋值我想大家都知道了。但结构体变量之间可以做比较吗?答案肯定是不行的,因为比较符号只作用于基本数据类型。如果是用C++或者Java来编程时遇到结构体变量之间的比较,那还好办直接对操作符...
  • 关于结构体成员的直接赋值

    千次阅读 2017-10-02 17:26:42
    #include #include struct student { char id[11]; char name[20]; char score[3]; char email[30]; int age; }; int main() ...//结构体成员为数组时进行单独赋值。 //第零种方法,字符串赋值
  • C语言结构体能否整体赋值

    千次阅读 2020-09-01 17:54:17
    可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,但是需要满足一个条件。 整体赋值规则 ansi/iso C规定:“相同类型的结构体是可以直接赋值的”; 合法赋值: 如date1和date2都是date结构体类型的变量...
  • C语言中结构体直接赋值

    千次阅读 2020-11-05 09:27:41
    在C语言中结构体变量之间可以进行赋值操作吗? 简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。 我们先下面一...
  • 一、按照成员变量进行赋值(麻烦,好理解,字符串赋值需要strcpy) 二、对数组整体进行赋值。(一次性需要把所有的都添加进去,不需要strcpy) (1) 在声明数组的时候,进行赋值 (2)对有规律的数据赋值,...
  • C# 结构体直接赋值的问题

    万次阅读 2016-04-13 20:15:31
    hehe =DeepClone(haha);  public static T DeepClone(T obj)  {  using (var ms = new MemoryStream())  {  var formatter = new BinaryFormatter();  
  • 结构体的多种赋值方式

    千次阅读 2019-10-13 10:08:03
    结构体初级 #include<stdio.h> #include<stdlib.h> typedef struct student //typedef 给struct student起个别名person { char name[20]; char Sex[5]; int age; double stature[1]; double weight...
  • 今天梳理下golang中结构体赋值、指针以及获取成员变量方式
  • 目的:在实际使用链表时,发现无法正常对嵌入的指向其他结构体指针的内容进行赋值,故而有了以下的记录。 我们在使用链表时,有时候会包含指向其他结构体的指针 比如说 typedef struct A { uint8_t a1; uint8_t a2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,068
精华内容 26,427
关键字:

结构体变量直接赋值