精华内容
下载资源
问答
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month; u8 day; ...1)C语言中,在相同类型的变量间赋值时是直接内存复制的;...2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
    typedef struct
    {
      u16 year;
      u8 month;
      u8 day;
      u8 hour;
      u8 minute;
      u8 second;  
      u8 reserved;
    } utc_time_t;
    
    utc_time_t time1;
    utc_time_t time2;
    utc_time_t * p_time;
    
    time1.year = 2019;
    time1.second = 55;
    
    p_time = &time1;
    
    time2 = time1;  //合法
    time2 = *p_time;  // 合法
    
    
    
    1)C语言中,在相同类型的变量间赋值时是直接内存复制的;
    2)两个同类型的结构体变量属于同一种变量;
    3)如果结构体内含有指针,注意拷贝的深度;
    
    展开全文
  • C语言结构体赋值

    2020-09-20 11:54:21
    本文是我在工作中遇到的C语言结构体赋值以及C语言指针问题后的一些总结,希望可以对你有所帮助。 介绍: 先不做讲解,看看下面的代码,大家猜一下打印的值,看大家对C语言结构体赋值和结构体指针是不是了解: ...

    声明:

        本文是我在工作中遇到的C语言结构体赋值以及C语言指针问题后的一些总结,希望可以对你有所帮助。

    介绍:

     

    先不做讲解,看看下面的代码,大家猜一下打印的值,看大家对C语言结构体赋值和结构体指针是不是了解:

    #include <stdio.h>
    int main () 
    {
    	typedef struct test {
    		int a;
    		int b;
    		char c[20];
    	}TEST;
    
    	TEST a1 = {1,2,"xiang"};
    	TEST b1 = {3,4,"jing"};
    	TEST *c1;
    	TEST *d1 = NULL;
    	
    	printf("a = %d, b = %d , c = %s \n", a1.a, a1.b, a1.c);
    	printf("a = %d, b = %d , c = %s \n", b1.a, b1.b, b1.c);
    	*c1 = a1;
    	printf("\\\\\\\\\\\\\\\\\\\\ *c1 = a1 \\\\\\\\\\\\\\\\\\\\\ \n");	
    	printf("a = %d, b = %d , c = %s \n", a1.a, a1.b, a1.c);
    	printf("a = %d, b = %d , c = %s \n", b1.a, b1.b, b1.c);
    	printf("a = %d, b = %d , c = %s \n", c1->a, c1->b, c1->c);
    	
    	c1->a = 6;
    	c1->b = 8;
    	printf("\\\\\\\\\\\\\\\\\\\*c1 = a1 c1->a = 6 c1->b = 8 \\\\\\\\\\\\\\\\\\\\\\ \n");	
    	printf("a1  a = %d, b = %d , c = %s \n", a1.a, a1.b, a1.c);
    	printf("b1  a = %d, b = %d , c = %s \n", b1.a, b1.b, b1.c);
    	printf("c1  a = %d, b = %d , c = %s \n", c1->a, c1->b, c1->c);
    	printf("c1's addr is 0x%p a1's addr is 0x%p  \n", c1, &a1);
     
    	d1 = &b1;
    	printf("\\\\\\\\\\\\\\\\\d1 = &b1\\\\\\\\\\\\\\\\\\\\\\\\ \n");	
    	printf("a1  a = %d, b = %d , c = %s \n", a1.a, a1.b, a1.c);
    	printf("b1  a = %d, b = %d , c = %s \n", b1.a, b1.b, b1.c);
    	printf("c1  a = %d, b = %d , c = %s \n", c1->a, c1->b, c1->c);	
    	printf("d1  a = %d, b = %d , c = %s \n", d1->a, d1->b, d1->c);	
    
    	d1->a = 5;
    	d1->b = 7;
    	printf("\\\\\\\\\\\\\\\\d1 = &b1 d1->a = 5  d1->b = 7\\\\\\\\\\\\\\\\\\\\\\\\\ \n");	
    	printf("a1  a = %d, b = %d , c = %s \n", a1.a, a1.b, a1.c);
    	printf("b1  a = %d, b = %d , c = %s \n", b1.a, b1.b, b1.c);
    	printf("c1  a = %d, b = %d , c = %s \n", c1->a, c1->b, c1->c);	
    	printf("d1  a = %d, b = %d , c = %s \n", d1->a, d1->b, d1->c);
    	printf("c1's addr is 0x%p a1's addr is 0x%p  \n", c1, &a1);
    	printf("d1's addr is 0x%p b1's addr is 0x%p  \n", d1, &b1);
    	return 0;
    }

    对应的log为:

    a = 1, b = 2 , c = xiang 
    a = 3, b = 4 , c = jing 
    \\\\\\\\\\ *c1 = a1 \\\\\ 这里就是结构体赋值,从结果看c1获得了与a1一样的值,似乎这里的操作与将c1指向a1 的操作相似
    a = 1, b = 2 , c = xiang 
    a = 3, b = 4 , c = jing 
    a = 1, b = 2 , c = xiang 
    \\\\\\\\\*c1 = a1 c1->a = 6 c1->b = 8 \\\\\\\\\\\  但是改变c1的值之后,就可以看出与指向a1的区别了
    a1  a = 1, b = 2 , c = xiang 
    b1  a = 3, b = 4 , c = jing 
    c1  a = 6, b = 8 , c = xiang   //这里只有c1的值改变了,但是a1的值并没有改变
    c1's addr is 0x0x7ffdd1610b88 a1's addr is 0x0x7ffdd1610a30    
    \\\\\\\\d1 = &b1\\\\\\\\\\\\   这里是将d1的值指向b1 ,d1的值与b1一样
    a1  a = 1, b = 2 , c = xiang 
    b1  a = 3, b = 4 , c = jing 
    c1  a = 6, b = 8 , c = xiang 
    d1  a = 3, b = 4 , c = jing 
    \\\\\\\\d1 = &b1 d1->a = 5  d1->b = 7\\\\\\\\\\\\   而改变d1的值的时候,b1的值也随之改变
    a1  a = 1, b = 2 , c = xiang 
    b1  a = 5, b = 7 , c = jing    //改变d1的值,b1的值也随之改变
    c1  a = 6, b = 8 , c = xiang 
    d1  a = 5, b = 7 , c = jing 
    c1's addr is 0x0x7ffdd1610b88 a1's addr is 0x0x7ffdd1610a30  
    d1's addr is 0x0x7ffdd1610a50 b1's addr is 0x0x7ffdd1610a50

    结论为:

    1. 使用C语言结构体赋值 可以获得赋值参数的值,但是之后赋值参数的修改(或者被赋值参数的修改)与被赋值参数(或者赋值参数)无关。因为这里赋值的与被赋值的不在同一空间,所以他们值得改变互不影响。

    2. 使用C语言结构体指针,可以将指针指向参数空间,这样指向的参数修改(或者被指向的参数修改)都会改变对方的值。或者双方的值都将随之改变。因为他们指向的是同一块空间,要变一起变。

    展开全文
  • 关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥最近在做通信协议的解析处理、传递分析等问题,总是遇到通信帧中的结构体拷贝等问题,遇到了一些坑,也是比较基础但是易错的C语言知...

    关注、星标公众号,直达精彩内容

    来源:技术让梦想更伟大

    作者:李肖遥

    最近在做通信协议的解析处理、传递分析等问题,总是遇到通信帧中的结构体拷贝等问题,遇到了一些坑,也是比较基础但是易错的C语言知识,一起来探究一下结构体的深拷贝和浅拷贝。

    浅拷贝

    C语言中的浅拷贝是指在拷贝过程中,对于指针型成员变量只拷贝指针本身,而不拷贝指针所指向的目标,它按字节复制的。我们分几种情况举例子来看一下。

    结构体中不存在指针成员变量时

    代码如下:

    //在win10_64位+vs2017
    //来源:技术让梦想更伟大
    //作者:李肖遥
    #include <stdio.h>
    typedef struct {
        char name[64];
        int age;
    }Member;
    
    int main(){
        Member stu1 = { "LiMing", 18 };
        Member stu2;
        stu2 = stu1;
        printf("%s,%d\n", stu2.name, stu2.age);
        system("pause");
        return 0;
    }
    
    展开全文
  • C语言结构体变量

    2019-07-08 16:06:41
    结构体变量的定义 结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的信息: struct student{int num;char name[20];int score;};struct为结构体关键字,student就是这结构体的类型名...

    结构体变量的定义

    结构体就是将不同类型的数据组合成一个有机的整体,以便于引用。如定义一个学生的信息:

    struct student{int num;char name[20];int score;};struct为结构体关键字,student就是这结构体的类型名,而 num,name, score就是该结构体的成员,他们可以是不同类型的,注意在定义类型的时候不要对结构体成员num,name, score赋初值。其次就是在大括号后面要有分号“;”。

    定义结构体变量的方式

    定义变量的方式都是大同小异的,都为数据类型+变量名这样一种方式,比如int型,首先得有int这样一个数据类型,然后再用int这个数据类型去定义一个变量,同样的,我们要定义一个结构体变量,必须要有一个结构体类型,然后用这个类型去定义一个变量。结构体变量的定义有多种方式:

    方式一:先定义结构体类型再定义变量名

    其中struct是关键字,student是结构体标记(用于为结构体命名),struct student代表该结构体的类型, 大括弧里面就是结构体的成员。注意大括弧的后面一定要有一个分号‘;’。到此为止我们有了"struct student"这样的类型了,struct student就等价于我们的int一样,接下来我们就要定义一个这样类型的变量,定义格式如下:struct student zhangsan; 这个zhangsan就是我们所要的结构体变量。

    方式二:在声明类型的同时定义变量

    如:

    这种方式定义结构体,后续可以根据需要定义新的变量,如struct student Wangwu。 注意:不能用Zhangsan去定义新的变量,这里Zhangsan、Lisi都为变量名而不是结构体类型。

    方式三:直接定义结构体类型变量

    这种定义方式中结构体变量只能在定义结构体类型的时候定义,不能再定义其他的变量。这样的定义的结构体类型是没有名字的,我们也可以用typedef重新为这样的结构体类型命,如:

    使用typedef后,我们可以用Zhangsan作为数据类型来定义新的变量。需要注意的是,不能直接使用Zhangsan.num,因为Zhangsan不是变量,而是结构体类型。

    结构体变量的初始化:

    结构体变量的应用:

    结构体中的成员,可以像普通变量那样单独使用,如下面例子中,结构体变量A中的成员num,可以用A.num的方式来使用。

    结构体变量的成员引用:结构体变量名.成员名

    关于结构体的一点说明:

    1、不能将结构体变量作为整体进行操作:printf("%d, %d\n", A);错误scanf("%d, %d\n”,&A); //错误printf("%d, %d\n”, A.num, A.score); //正确scanf("%d, %d\n”, &Lucy.num, &Lucy.sex); //正确2、当结构体变量的成员也是结构体类型时,引用必须用最底层的成员变量,如下

    3、成员名可与程序中的变量名相同,二者代表不同对象

    4、可以引用结构体变量成员的地址,也可以引用结构体变量的地址,例如:scanf("%d", &A.num); //输入A.num的值printf("%d", &A); //输出Bob的首地址目的:主要用作函数参数,传递结构体变量的地址。5、允许具有相同类型的结构变量可以相互赋值,其它情况不允许对结构变量直接赋值。

    就这么多吧,后续写写结构体数组,结构体指针,共用体,枚举,typedef,最后说一下结构体内存分配相关方面的内容。

    展开全文
  • C语言结构体直接赋值

    千次阅读 2020-11-05 09:27:41
    FROM:http://codewenda.com/c语言结构体直接赋值/ 在C语言中结构体变量之间可以进行赋值操作吗? 简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活...
  • 2、结构体的目的是为了描述一个对象,为了把一个对象描述清除必须要所出这个对象的很多属性,而为了表示这些属性就要用到不同的变量,而且变量不止一个。 二、如何来定义结构体: 1、定义结构体 格式: struct 结构体...
  • c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{ int id; char name[10]; }; //******结构体数组的赋值 int main(){ int m; //定义结构体数组的长度所需变量 int i; printf(...
  • 结构体变量赋值

    2020-02-22 15:21:51
    结构体内变量赋值暂且分为三种(笔者此时只能想到三种) 1.定义时赋值 2.定义后对变量挨个赋值 3.利用函数进行赋值 赋值时再分为两类 1.非数组赋值 2.数组赋值 1.比较简单,在此不做过多介绍,只是简单贴下代码。 ...
  • C语言结构体变量私有化

    千次阅读 2019-04-03 20:26:03
    C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 有人说可以通过设置private使成员变量私有化,但如果这样做那就真的“私有化”了。因为一般结构体都没有成员函数(尽管...
  • C语言结构体变量之间赋值

    万次阅读 2015-03-31 18:41:33
    最近,我阅读了某新员工小刘写的C语言代码,发现其对结构体变量之间的赋值不是很熟悉。对于两个相同类型的结构体变量,他均采用的是逐个成员变量直接赋值的形式。如下的代码示例:/********************************...
  • C语言结构体能否整体赋值

    千次阅读 2020-09-01 17:54:17
    C语言结构体的能否整体赋值 先放结论 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,但是需要满足一个条件。 整体赋值规则 ansi/iso C规定:“相同类型的结构体是可以直接赋值的”; 合法赋值: 如...
  • C语言结构体进行赋值操作一、说明二、环境三、代码四、运行 一、说明 定义一个结构体: 并对其进行初始化操作,赋值操作,打印 1.注意, struct 定义的位置可以在main函数的外边 2.用的时候是 struct student ...
  • C语言结构体赋值问题

    2019-09-20 14:44:46
    之前的系统参数用一个结构体变量tempBasicInfo来保存,成员类型有:uint8_t、uint16_t、结构体,结构体成员为uint8_t、uint16_t;今天需要添加一系列参数,用了一个uint8_t和三个uint8_t数组;以前配置完tempBasic.....
  • 最近发现一种比较方便的方式来对结构体进行赋值,那就是...来赋值的话,可以不需要按照结构体中的变量顺序,而是通过指定变量进行赋值。 另外一个例子如下,可以直接对嵌套的结构体赋值。 #include <stdio....
  • 做了一个小的例子: #include int main() { struct Link { int LinkId; int LinkLen; int NxtLnkId; }Lnk[3]; Lnk[0].LinkId = 1; Lnk[0].LinkLen = 300; Lnk[0].NxtLnkId = 2... } 结构体数组的赋值情况:
  • c语言结构体赋值问题

    2020-07-03 10:15:18
    一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。但是稍微复杂一点的结构体里面会 有指针成员,那么以上的浅拷贝则会有问题。 1)赋值会直接将...
  • c语言中结构体类型变量类型,结构体变量赋值 这几天看图用领接表存储图时候,开始实现的时候发现对结构体的变量名赋值有些疑惑,疑惑的地方查了下,留做备份 //此声明声明了拥有3个成员的结构体,分别为整型的a,...
  • FROM:http://codewenda.com/c语言结构体直接赋值/ 在C语言中结构体变量之间可以进行赋值操作吗? 简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体...
  • 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...
  • C语言结构体对象间直接赋值

    万次阅读 2017-08-03 10:20:29
    C语言变量间互相赋值很常见,例如:int a,b; a = b;结构体也是变量(自定义变量),两个结构体之间直接赋值按道理应该也是可以的吧,说实话之前还从没遇到过将一个结构体对象赋值给另一个结构体对象的(见识太浅)...
  • C语言结构体赋值

    2021-06-30 00:12:01
    结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用。对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值。那么能否将一个结构体用赋值号(“=”)直接赋值给另一个结构体呢?...
  • 1结构体赋值 #include <windows.h> struct MyStruct { int a; int b; char c[20]; }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int ..
  • C语言的几种结构体Struct的赋值方法

    万次阅读 2019-11-28 09:18:24
    1.1 定义结构体类型时,定义结构体变量 1.2 定义结构体类型后,定义结构体变量 1.3 直接定义结构体变量 这里是定义结构体类型。 #include <stdio.h> struct Init{ int a; double b; char *c; }; ...
  • C语言结构体结构体引例结构体变量的定义结构体变量的使用结构体变量作为函数参数结构体变量的初始化 结构体 引例 输出平均分最高的学生信息 #include <stdio.h> struct student { int num; char name[10]; ...
  • . . word. . . . . 指向结构体的指针 在C语言中几乎可以创建指向任何类型的指针包括用户自定义的类型创建结构体指针是极常见的下面是一个例子 r是一个指向结构体的指针请注意因为r是...您可以像对待一个普通结构体变量

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,247
精华内容 14,898
关键字:

c语言结构体变量赋值

c语言 订阅