精华内容
下载资源
问答
  • 结构体赋值

    千次阅读 2019-09-30 11:47:51
    结构体是C语言中重要的概念,理解结构体并且能够...结构体赋值有三种: 1.定义时赋值   2.定义后对成员变量挨个赋值   3.结构体作为参数时赋值   转载于:https://www.cnblogs.com/yinguojin/p/9538487.h...

    结构体是C语言中重要的概念,理解结构体并且能够熟练使用结构体能够提高开发效率,优化代码。

    结构体的概念可以自己百度或者看课本,这里分析一下结构体的赋值问题。

    结构体赋值有三种:

    1.定义时赋值

      

    2.定义后对成员变量挨个赋值

      

    3.结构体作为参数时赋值

      

     

    转载于:https://www.cnblogs.com/yinguojin/p/9538487.html

    展开全文
  • 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语言结构体指针,可以将指针指向参数空间,这样指向的参数修改(或者被指向的参数修改)都会改变对方的值。或者双方的值都将随之改变。因为他们指向的是同一块空间,要变一起变。

    展开全文
  • Go 通用结构体赋值

    2021-09-28 11:39:31
    package main import ( "errors" "fmt" "reflect" ) type cat struct{ Name string Age int } type mouse struct { name string color string } func main() { tomcat := &... "Ag
    package main
    
    import (
    	"errors"
    	"fmt"
    	"reflect"
    )
    
    type cat struct{
    	Name string
    	Age  int
    }
    
    type mouse struct {
    	name  string
    	color string
    }
    
    func main() {
      tomcat := &cat{}
      fillBySettings(tomcat,map[string]interface{}{
      	"Name":"tom",
      	"Age":6,
      })
    
      fmt.Println(tomcat)
    
      defer func() {
      	if err := recover(); err != nil {
      		fmt.Println(err)
    	}
      }()
    
      func() {
    	  jerrymouse := &mouse{}
    	  fillBySettings(jerrymouse,map[string]interface{}{
    		  "name":"tom",
    		  "color":"cyan",
    	  })
    	  fmt.Println(jerrymouse)
      }()
    }
    
    func fillBySettings(structPtr interface{}, settings map[string]interface{})error{
      if reflect.TypeOf(structPtr).Kind() != reflect.Ptr {
      	return errors.New("the first param is not a pointer")
      }
    
      if settings == nil {
      	return errors.New("settings is nil")
      }
    
      var (
      	field  reflect.StructField
      	ok     bool
      )
    
      for k, v := range settings {
      	if field, ok = (reflect.ValueOf(structPtr)).Elem().Type().FieldByName(k); !ok {
      		continue
    	}
    	if field.Type == reflect.TypeOf(v) {
    		reflect.ValueOf(structPtr).Elem().FieldByName(k).Set(reflect.ValueOf(v))
    	}
      }
      return nil
    }
    
    
    
    展开全文
  • 最近没少使用golang,也没经过系统的学习,直接就上去开发了,遇到不少坑也学到不少东西,本次记录下给空结构体赋值的问题。 二、案例 1.结构体结构及错误 type Test struct { Test1 int64 `gorm:"column:test1" ...

    一、前言

          最近没少使用golang,也没经过系统的学习,直接就上去开发了,遇到不少坑也学到不少东西,本次记录下给空结构体赋值的问题。

    二、案例

    1.结构体结构及错误

    type Test struct {
        Test1     int64  `gorm:"column:test1" json:"test1"`
        Test2     string `gorm:"column:test2" json:"test2"
    }
    
    var test []*Test
        //这种方式是失败的? 因为目前是空的,不能用类似于php的方法写死
        test[0].Test1 = xxx
        test[0].Test2 = xxxx
    

          这里可以看到,本来想直接填充来着,但是死活写入不了,惯性思维害死人啊,网上百度原因 是一个空的结构体,指针为nil,是不占用内存空间的,无法赋值

    2.给空结构体赋值的方式

    (1)第一种方法

    直接赋值 (表示这个是一个testStruct{}类型)
             
              test1 :=testStruct{
                Test1:          xx,
                Test2:          xx,
            }
    

    (2) 第二种方法

     test1 := &testStruct{}
     test1.Test1 = int64(0)
    

    (3)第三种方法

      test1 :=new(testStruct)
      test1.Test1 = int64(0)
    

    (4)关于new和make初始化的区别

    new: 适用于创建指针,一般创建基本类型,int等,返回的是指针
    make:主要创建引用类型,比如切片,map。返回的是创建的类型本身的引用,修改的话会影响到本身,类似于php的&
        make类似于[]int{} 来初始化。
    

          说实话,稍微有点繁琐了,其实关键还是在初始化这个结构体的时候,加引用就好了,这样返回的不是nil,剩下的自然就好操作了。。

    end

    展开全文
  • 关于UE4 中结构体 赋值结构体赋值 ** 1, 经典的指令 set ref 当我们对结构体进行赋值的时候, 最常用的指令是 set ref , 使用此指令可以 快读的对 结构体 中的一个单元进行赋值。 但是我们在测试的时候, 此条指令...
  • 文章目录前言一、结构体赋值方法?二、使用步骤1.懵逼代码2.仔细看结构体名总结 前言 结构体的赋值懵逼了 一、结构体赋值方法? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 ...
  • go 结构体赋值

    千次阅读 2020-02-24 20:54:02
    后面的一个赋值将覆盖掉前面的一个的赋值,导致前面的一个Options得不到正确的值 opt = defaultOption是指针赋值,即opt的指针被改掉了 *opt = *defaultOpt仅仅赋值,即内存拷贝    
  • 1结构体赋值 #include <windows.h> struct MyStruct { int a; int b; char c[20]; }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int ..
  • 一直想直接用结构体,把所有相关的函数都放进去(通过函数指针,然后把函数赋值给函数指针),这样对外使用的时候就一个结构体把相关的函数都集合到一起了,很像类一样,而且方便函数补全,只要结构体名称,点后面就...
  • // 为dest在source中存在的字段自动赋值 func CopyStruct(source interface{}, dest interface{}) { sByte, _ := json.Marshal(source) _ = json.Unmarshal(sByte, dest) } 很简单,好使
  • 函数体对结构体赋值的几种方法

    千次阅读 2020-08-22 15:39:16
    使用一级指针进行赋值时,在原调用体内声明一个此结构体类型的变量,再用取地址获得变量的指针传达赋值函数内进行赋值。例子如下: #include <iostream> using namespace std; struct POINT { int a; int b...
  • c语言结构体赋值问题

    2020-07-03 10:15:18
    一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。但是稍微复杂一点的结构体里面会 有指针成员,那么以上的浅拷贝则会有问题。 1)赋值会直接将...
  • 主要使用的是第一种,类似数组赋值 #include typedef struct al_data { int a; int b; int c; char ch; }al_data; struct al_data ad = { 1, 3, 9, 'A', }; struct al_data ad2 = { .a = 2, .b = 6, .c = 18, .ch = ...
  • C++_结构体赋值

    千次阅读 2019-06-21 20:41:14
    一、结构体初始化/变量简单赋值 https://blog.csdn.net/datase/article/details/78988320 二、针对项目,对结构体中的部分变量进行赋值,并且把excel的每一行数据复制成一个结构体 ...
  • 一般来说,定义结构体时会默认生成一个(不可见的)构造函数 struct Node{ int node1; double node2; char node3; Node() {} //默认生成的构造函数 }; 它没有返回值,所以构造函数前没有返回值类型 它没有参数,...
  • C++ 结构体赋值

    千次阅读 2018-12-19 09:09:46
    一直记得C语言中,结构体是不可以直接赋值的,需要逐一成员赋值或者用memcpy函数。 但是在C++中可以(无需重载=运算符),需要区分以下3种情况: #include&lt;iostream&gt; #include&lt;string&...
  • 最近发现一种比较方便的方式来对结构体进行赋值,那就是通过点号来赋值。 实例代码如下 struct { int a, b, c, d;...另外一个例子如下,可以直接对嵌套的结构体赋值。 #include <stdio....
  • 另一个是自己遇到的,传入一个QString ,在给一个自定义结构体赋值的时候崩溃,断点调试发现结构体里面已经初始化但是声明的变量中去看对应的成员显示问号未知内存,成员都是变量不是指针,然后把QString改为std::...
  • C语言结构体赋值问题

    2019-09-20 14:44:46
    之前的系统参数用一个结构体变量tempBasicInfo来保存,成员类型有:uint8_t、uint16_t、结构体结构体成员为uint8_t、uint16_t;今天需要添加一系列参数,用了一个uint8_t和三个uint8_t数组;以前配置完tempBasic.....
  • 在项目调试过程中,碰到 一个这样的问题,c++结构体赋值问题。在c语言中,一个结构体变量是可以赋值给另外一个结构体变量的。在c++情况有所变化,仅此记录一下. 此为一个概率事件。 //定义接收数据数据,对内发布的...
  • 直接使用等号赋值即可: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...
  • /* 嵌套结构体赋值 1.memcpy实现 2.定义局部变量,然后用结构体赋值 */ typedef struct { int a; int b; } Stu1; typedef struct { int c; char d; } Stu2; typedef struct { Stu1 st1; Stu2 st2; } Stu3...
  • 结构体赋值方法

    千次阅读 2017-09-19 19:20:00
    结构体数组赋值赋值方法 typedef struct { short Id; char Sstr[19]; } TestStr; 第一种:TestStr ls_TestStr[] = {{0,"hello0"},{1,"hello11"}}; 第二种: TestStr ls_TestStr[2]; TestStr...
  • 【C语言】结构体赋值

    2021-06-30 00:12:01
    结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用。对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值。那么能否将一个结构体用赋值号(“=”)直接赋值给另一个结构体呢?...
  • 看到很多C代码的结构体赋值都是用memcpy函数来拷贝,其实根本不需要,用等号直接赋值即可。结构体描述的是的一块连续内存的内存布局,用等号来用一个结构体给另一个结构体赋值,编译不会有任何问题,其效果显然也和...
  • 结构体 有结构的变量 程序中用DATA定义的局部变量,也可以使用types 语法: DATA: BEGIN OF <name> <field1>... <field2>... END OF<name>. 例子: DATA:BEGIN OF USERINF, SID(10) ...
  • 关于C/C++中的结构体赋值问题

    千次阅读 2018-01-27 17:33:25
    在C++11标准中,是允许对结构体进行以下赋值操作的: #include struct book{ char title[200]; char author[200]; float val; }; int main() { struct book lib { // "The Pious Pirate and The Devious ...
  • C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。 例如: char a[10] = "123"; /*正确,在...
  • c语言——结构体赋值 结构体赋值1 struct Person { char name[64]; int age; }; void test01() { struct Person person1 = { "aaa", 20 }; struct Person person2 = { "bbb", 30 }; //赋值操作 person1 = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,378
精华内容 53,351
关键字:

结构体赋值