精华内容
下载资源
问答
  • 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语言结构体赋值问题

    2020-07-03 10:15:18
    一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。但是稍微复杂一点的结构体里面会 有指针成员,那么以上的浅拷贝则会有问题。 1)赋值会直接将...

    一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。但是稍微复杂一点的结构体里面会 有指针成员,那么以上的浅拷贝则会有问题。
    1)赋值会直接将结构体的指针变量被赋值,赋值之前其所指向的内存单元丢失;
    2)赋值之后若该指针指向的内存单元被其它指针释放掉,那么继续使用该成员指针的话则又可能导致内存泄漏。

    展开全文
  • 最近发现一种比较方便的方式来对结构体进行赋值,那就是通过点号来赋值。 实例代码如下 struct { int a, b, c, d;...另外一个例子如下,可以直接对嵌套的结构体赋值。 #include <stdio....

    最近发现一种比较方便的方式来对结构体进行赋值,那就是通过点号来赋值。

    实例代码如下

    struct {
    int a, b, c, d;
    }test={
    .c = 3, 
    .b = 2,
    .d = 4,
    .a = 1
    };

    通过.来赋值的话,可以不需要按照结构体中的变量顺序,而是通过指定变量进行赋值。

    另外一个例子如下,可以直接对嵌套的结构体赋值。

    #include <stdio.h>
    int main()
    {
        struct person{
            int age;
            char name[30];
        };
        struct test{
            struct person p1;
        };
        struct test *t;
        struct test tt={
        .p1={
            .age=19,
            .name="hello"
        }
        };
        t=&tt;
        printf("%s",t->p1.name);
        return 0;
    }

    还能对结构体数组赋值

    #include <stdio.h>
    
    struct
    {
        int arr[3];
        int b;
    } test[] = {
        [0].arr =
        {1, 6, 8},
        [1].b = 2
    };
    
    int main()
    {
        int i;
        printf("结构体变量test[0]的参数如下\n");
        for (i = 0; i < 3; i++)
            printf("test[0].arr[%d]=%d ", i, test[0].arr[i]);
        printf("test[0].b=%d\n\n", test[0].b);
    
        printf("结构体变量test[1]的参数如下\n");
        for (i = 0; i < 3; i++)
            printf("test[1].arr[%d]=%d ", i, test[1].arr[i]);
        printf("test[1].b=%d\n", test[1].b);
    
        return 0;
    }

     

    展开全文
  • C语言结构体赋值问题

    2019-09-20 14:44:46
    之前的系统参数用一个结构体变量tempBasicInfo来保存,成员类型有:uint8_t、uint16_t、结构体结构体成员为uint8_t、uint16_t;今天需要添加一系列参数,用了一个uint8_t和三个uint8_t数组;以前配置完tempBasic.....

    【问题描述】

           之前的系统参数用一个结构体变量tempBasicInfo来保存,成员类型有:uint8_t、uint16_t、结构体,结构体成员为uint8_t、uint16_t;今天需要添加一系列参数,用了一个uint8_t和三个uint8_t数组;以前配置完tempBasicInfo后会将其赋给常驻的stBasicInfo: 

        stBasicInfo = tempBasicInfo;

        增加数组成员后,编译无错,但是调试时出现异常,如:断点不停,或是有时单步可以,突然某一步直接run了;

    【问题处理】

         查了半天,才定位到这里,用memcpy替代后,正常。谨记之~!!!

    typedef struct	                              // 基本系统参数
    	{
    		uint8_t         CfgFlag;			  
    		uint8_t	        ProtocolType;		  
    		uint8_t         Operator;			  
    		uint16_t        CollectInterval;	  
    		uint16_t        UploadInterval;     
    		uint8_t         TotalNum;			  
    		structIPAddress IPAddress;	          // IP address & port NO.
    
    #if defined(xxx)
    		uint16_t        dtuTempUploadInt;
    		uint16_t        statUploadInt;
    		uint16_t        tempUploadInt;
                
    		uint8_t         para_f4;                        // dtu uplink parameters
    		uint8_t         para_f10[PARA_LEN_DOWN_LINK];   // dtu down-link parameters
    		uint8_t         para_f29[PARA_LEN_UPLOAD_DATA]; // control parameters of upload data
    		uint8_t         para_f31[PARA_LEN_TIME];        // time parameters of dtu
    #endif
    	}strcBasicInfo;

     

    转载于:https://my.oschina.net/u/3253097/blog/2988020

    展开全文
  • 1结构体赋值 #include <windows.h> struct MyStruct { int a; int b; char c[20]; }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int ..
  • c语言 结构体数组的赋值 //**创建结构体** #include<stdio.h> struct Class{ int id; char name[10]; }; //******结构体数组的赋值 int main(){ int m; //定义结构体数组的长度所需变量 int i; printf(...
  • c语言结构体学习整理(结构体初始化,结构体指针)

    万次阅读 多人点赞 2018-11-01 20:22:12
    c语言中交换两个结构体的值(结构体指针) 1关于语言的结构体: 首先我们为什么要用到结构体,我们都已经学了很多int char …等类型还学到了同类型元素构成的数组,以及取上述类型的指针,在一些小应用可以灵活...
  • c语言结构体赋值

    2014-08-28 10:51:34
    c语言结构体可直接赋值
  • c语言——结构体赋值 结构体赋值1 struct Person { char name[64]; int age; }; void test01() { struct Person person1 = { "aaa", 20 }; struct Person person2 = { "bbb", 30 }; //赋值操作 person1 = ...
  • 1 代码 #include struct Student{  char sex;  int age;  char name[10]; }; main(){  struct Student xiaohong;  xiaohong.age = 1;  xiaohong.sex = 'w';  strcpy(xiaohong.name, "hello");
  • 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语言结构体赋值

    2021-06-30 00:12:01
    结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用。对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值。那么能否将一个结构体用赋值号(“=”)直接赋值给另一个结构体呢?...
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month;...1)C语言中,在相同类型的变量间赋值时是直接内存复制的; 2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
  • C语言结构体进行赋值操作一、说明二、环境三、代码四、运行 一、说明 定义一个结构体: 并对其进行初始化操作,赋值操作,打印 1.注意, struct 定义的位置可以在main函数的外边 2.用的时候是 struct student ...
  • 关注、星标公众号,直达精彩内容来源:技术让梦想更伟大作者:李肖遥最近在做通信协议的解析处理、传递分析等问题,总是遇到通信帧中的结构体拷贝等问题,遇到了一些坑,也是比较基础但是易错的C语言知...
  • 做了一个小的例子: #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... } 结构体数组的赋值情况:
  • 直接使用等号赋值即可:n2 = n1; struct node { long a; int b; char c; long array[3]; }; int main() { struct node n1; n1.a = 1; n1.b = 2; n1.c = 3; n1.array[0] = 10; n1.ar...
  • C语言结构体可以直接赋值, 1:在定义结构体变量时,可根据结构体格式赋值。 2:在运算过程中,一个结构体可以直接赋值给另外一个结构体。 3:结构体指针不能直接被赋值,包括结构体指针下面的结构体(也就是说...
  • 如图所示,我应该怎样正确输出打印结构体指针对应的字符串数据呢??
  • C语言结构体能否整体赋值

    千次阅读 2020-09-01 17:54:17
    C语言结构体的能否整体赋值 先放结论 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,但是需要满足一个条件。 整体赋值规则 ansi/iso C规定:“相同类型的结构体是可以直接赋值的”; 合法赋值: 如...
  • 定义 struct InitMember { int first; double second;...方法一:定义时赋值 struct InitMember test = {-10,3.141590,"method one",0.25}; 需要注意对应的顺序,不能错位。 方法二:定义后逐个赋值 stru
  • /* 嵌套结构体赋值 1.memcpy实现 2.定义局部变量,然后用结构体赋值 */ typedef struct { int a; int b; } Stu1; typedef struct { int c; char d; } Stu2; typedef struct { Stu1 st1; Stu2 st2; } Stu3...
  • c语言结构体的字符串赋值

    万次阅读 2017-05-15 22:57:44
    struct student  {  char name[20]; }; #include main() {  struct student s1;  s1.name = "zhang";...上面的这个代码会报错,原因是因为在c的结构体中,字符串不能直接这样赋值,需要
  • 看到很多C代码的结构体赋值都是用memcpy函数来拷贝,其实根本不需要,用等号直接赋值即可。结构体描述的是的一块连续内存的内存布局,用等号来用一个结构体给另一个结构体赋值,编译不会有任何问题,其效果显然也和...
  • 今天小编就为大家分享一篇关于C语言结构体数组同时赋值的另类用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 如: ...原理就是因为加 “.”就表示在这个结构体中选择这个变量来赋值,所以可以不考虑结构体中变量的顺序 不加"."的话赋值可以直接写 struct atag_tcc_entry tcc_param = { 0, 0, } 这样就必须要按
  • C语言结构体直接赋值

    万次阅读 多人点赞 2018-10-21 10:47:29
    FROM:http://codewenda.com/c语言结构体直接赋值/ 在C语言中结构体变量之间可以进行赋值操作吗? 简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,974
精华内容 17,589
关键字:

c语言结构体赋值

c语言 订阅