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

    2019-04-24 10:45:28
    初始化 struct tag { chara; int b;...方式3:结构变量间的赋值 struct tag { chara; int b; }; struct tag x,y; x.a=’A’; x.b=1; y = x;/ 结构变量间直接赋值 /

    初始化
    struct tag

    {

     chara;
    

    int b;

    }x = {‘A’, 1};/初始化/

    struct tag

    {

    char a;

    int b;

    };

    struct tag x = {‘A’,1};/在定义变量时初始化/

    GNU C中可使用另外一种方式:

    struct tag

    {

    char a;

    int b;

    }x =

    {

    .a = ‘A’,

    .b =1;

    };

    struct tag

    {

    char a;

    int b;

    };

    struct tag x =

    {

     .a= ‘A’,
    

    .b=1,

    };

    方式2:定义变量后按字段赋值

    struct tag

    {

    char a;

    int b;

    };

    struct tag x;/定义变量/

    x.a = ‘A’;/按字段赋值/

    x.b = 1; /按字段赋值/

    而当你使用初始化的方式来赋值时,如x = {‘A’,1};则出错。

    方式3:结构变量间的赋值

    struct tag

    {

     chara;
    

    int b;

    };

    struct tag x,y;

    x.a=’A’;

    x.b=1;

    y = x;/结构变量间直接赋值/

    展开全文
  • 1/*结构体的赋值和初始化*/23#include<stdio.h>45structStudent6{7intage;8floatscore;9charsex;10};1112intmain(void)13{14structStudentst={80,66.6,'F'};//定义...
     1 /*结构体的赋值和初始化*/
     2 
     3 # include <stdio.h>
     4 
     5 struct Student 
     6 {
     7     int age;
     8     float score;
     9     char sex;
    10 };
    11 
    12 int main(void)
    13 {
    14     struct Student st = { 8066.6'F'};//定义同时就赋值
    15     struct Student st2;//下一行不能写一句类似于st2 = { 10, 88, 'M'};的语句,除非定义时就赋值。
    16     st2.age = 10;
    17     st2.score = 88;
    18     st2.sex = 'M';
    19 
    20     printf("%d , %f, %c\n", st.age, st.score, st.sex);
    21     printf("%d , %f, %c\n", st2.age, st2.score, st2.sex);
    22 
    23     return 0;
    24 }
    25 /*
    26 在Vc++6.0中显示的结果是:
    27 =========================================
    28 80 , 66.599998, F
    29 10 , 88.000000, M
    30 =========================================
    31 */

     

      1 /*

     2 如何取出结构体变量中的每一个成员
     3 */
     4 # include <stdio.h>
     5 
     6 struct Student 
     7 {
     8     int age;
     9     float score;
    10     char sex;
    11 };
    12 
    13 int main(void)
    14 {
    15     struct Student st = { 8066.6F'F'};
    16     printf("age = %d\n",st.age);
    17 
    18 
    19     struct Student * pst = &st;//&st不能改成st
    20     pst->age = 88;  //第二种方式。。。pst->age在计算机内部,会被转化成(*pst).age 这是一种硬性规定
    21                     //所以pst->age等价于(*pst).age ,也等价于st.age
    22     printf("age = %d\n",st.age);
    23 
    24 
    25     st.age = 10;  //第一种方式
    26     printf("age = %d, score = %f\n",st.age, pst ->score);//st.age可写成pst ->age, pst ->score也可写成st.score.
    27 
    28     return 0;
    29 }
    30 /*
    31 在Vc++6.0中显示的结果是:
    32 ==============================================================
    33 age = 80
    34 age = 88
    35 age = 10, score = 66.599998
    36 ==============================================================
    37 */

     

     

     

    转载于:https://www.cnblogs.com/jssong20000/archive/2012/09/05/2672601.html

    展开全文
  • 关于linux中内核编程中结构体的赋值操作(结构体指定初始化) 网址:http://blog.chinaunix.net/uid-24807808-id-3219820.html 在看linux源码的时候,经常会看到类似于下面的结构体赋值的代码: ...

    关于linux中内核编程中结构体的赋值操作(结构体指定初始化)

    网址:http://blog.chinaunix.net/uid-24807808-id-3219820.html

    在看linux源码的时候,经常会看到类似于下面的结构体赋值的代码:

    1. struct device my_dev =
    2. {
    3.      .bus = &my_bus_type,
    4.      .parent = &my_bus,
    5.      .release = my_dev_release,
    6. };

      整体上看,貌似与我们平时遇到的结构题赋值差不多,可是在变量前面加了一个点,好像我们就不知道是什么意思了。
     
     上面的这种赋值方式成为指定初始化(designated initializer)。源自ISO C99标准。  
     C Primer Plus有比较详细的描述,如下:
    已知一个结构体定义:

    点击(此处)折叠或打开

    struct book
    {
        char title[MAXTITL];
        char author[MAXAUTL];
        float value;
    };

      C99支持结构体的指定初始化项目,其语法与数组的指定初始化近似。只是,结构体的指定初始化项目使用点运算符和成员名来标识具体的元素。
      
      例如,只初始化book结构体中的成员value,可以这样做:
    struct book a = {.value = 10.99};    
      可以按照任意的顺序使用初始化项目:    

    点击(此处)折叠或打开

    1. struct book gift = 
    2. {
    3.     .value = 25.90,
    4.     .author = "Li Cong",
    5.     .title = "Love Linux",
    6. };

      和数组一样,跟在一个制定初始化项目之后的常规初始化项目为跟在指定成员后的成员提供了初始值。另外,对特定成员的最后一次赋值是它实际获得的值。例如:

    struct book gift =
    {
        .value = 18.90,
        .author = "Li Cong",
        20.0
    };
      这将把值20.0赋给成员value,因为它在结构声明中紧跟在author成员之后。新的值20.0代替了早先的赋值18.90。

    注意:
    1. 结构体指定初始化时,用到的就是点运算符加变量名,不许要指明类型,程序会自动匹配。
    2. 右边的值类型尽量要匹配左边的类型。
    3. 初始化时,变量之间可以用逗号分开,也可以用分号分开。
    4. 整个结构体外边不要忘记分号。

    展开全文
  • C语言: 结构体的赋值

    千次阅读 2015-05-09 00:08:13
    对一个结构体赋值时,经常采用方式是,分别对其成员变量赋值。那么能否将一个结构体赋值号(“=”)直接赋值给另一个结构体呢?网上答案不一,有说可以,有说不可以,有说这样话两个结构体共用一块内存...

    转载请注明来源 http://blog.csdn.net/imred/article/details/45588477
    结构体在 C 程序中使用的较为频繁,能对数据有一定的封装的作用。对一个结构体赋值时,经常采用的方式是,分别对其成员变量赋值。那么能否将一个结构体用赋值号(“=”)直接赋值给另一个结构体呢?网上的答案不一,有说可以的,有说不可以的,有说这样的话两个结构体共用一块内存空间。我们可以从汇编语言的角度来看这个问题,测试程序:

    //test.c
    #include <stdio.h>
    
    int main()
    {
        struct foo
        {
            int a;
            int b[5];
            int *c;
        } x, y;
        x.a = 666;
        x.b[0] = 555;
        x.c = NULL;
    
        y = x;
    
        return 0;
    }
    

    程序定义了结构体 foo,它有3个成员变量:int 型数据 a、int 数组 b、int 指针 c,以观察是否对不同类型的成员有不同的处理。使用 gcc 将其编译:

    gcc -S -masm=intel test.c

    编译时并没有报错,说明编译器接受这种赋值方式,但赋值时具体发生了什么?打开其输出的汇编文件,关键部分为:

    mov     DWORD PTR [esp+36], 666
    mov     DWORD PTR [esp+40], 555
    mov     DWORD PTR [esp+60], 0
    lea     edx, [esp+8]
    lea     ebx, [esp+36]
    mov     eax, 7
    mov     edi, edx
    mov     esi, ebx
    mov     ecx, eax
    rep movsd

    前面3条 mov 语句为给成员变量赋值的语句;中间两条 lea 语句得到了两块内存空间的偏移地址,第一块为新的内存空间,第二块为结构体 x 占有的内存空间;后面4条 mov 语句,第1、4条作用为把7赋给 ecx,第2条为把新内存空间地址赋给 edi,第3条为把 x 内存空间地址赋给 esi。关键在于最后一条语句:rep movsd。
    movsd 是一个串传送指令,其英文为 move string dword,具体作用为以 esi(Source Index)为源地址,以 edi(destination Index)为目的地址,将源地址处一个双字(dword)内容复制到目的地址。然后根据方向标志位 DF 的值,DF = 0,esi 与 edi 自增4,DF = 1,esi与edi自减4(dword 占用4个字节)。(但此处并没有使用 CLD 设置 DF 值,默认为0?)rep 可以根据 ecx 的值,重复执行 ecx 次 movsd 指令。
    这样的话,rep movsd 指令的作用是,将 esi 处的7个 dword 复制到 edi 处,而 foo 结构体正好占用4*7个字节(此处没有对齐的问题)。于是,x 的内容便被复制到了另一块相同大小的内存中,我们基本可以确定,这块空间就是 y 所占的空间。
    因此,我们可以得出结论,结构体可以直接赋值,且赋值的结果是将赋值号左边的结构体中的内容原原本本的复制到赋值号右边的结构体中,并没有共用同一块内存空间。
    转载请注明来源 http://blog.csdn.net/imred/article/details/45588477

    展开全文
  • 最近在看关于队列调度的内核实现代码时,发现奇怪的赋值语句,写此文章记录下。
  • 前几天在写代码过程中发现,用List存储结构体赋值失败; struct Member { public string name; public int id; } List<Member> memberList=new List<Member>(); //memberList从外部读取后对某个...
  • //18结构体的赋值 //结构既然是一种数据类型,那么我们就可以象变量那样进行赋值操作,不过前提是必须两个结构都是同类型 /*#include <iostream> using namespace std; struct people { double ...
  • 数组 结构体的赋值

    千次阅读 2016-08-15 14:06:48
    在 C/C++中,普通数组只是分配在连续地址上一段相同类型变量组成,而不是一个变量。像a[n]并不是一个变量,而是通过指向第一个值指针来操作...因此像数组整体赋值这类操作是没有意义,因为它们不是一个整体。
  • 两个结构体变量,是可以直接赋值的,如有A,B,可以直接写成A=B这样。 结构体内变量会分别赋过去。 但是有一种情况却要注意一下,就是结构体内有指针时。 下面我们仔细分析一下: 首先有A,B两个同类型...
  • 定义结构体class ,class结构体中包含student 结构体指针 如何访问,赋值给class->student? #cat struct_find.c #include <stdio.h> #include <stdlib.h> #include <string.h> struct class {...
  • 关于Matlab元胞结构体的赋值问题

    千次阅读 2017-10-27 21:41:36
    编程如下读取结构体target中数据,target结构体如下所示: 代码如下: tr_ind=find(img.images.set==1); te_ind=find(img.images.set==3); train.feature=target.feature{tr_ind}; train.mask
  • 在定义结构体变量的时候,可以直接对其初始化,类似于数组的初始化方法,使用花括号对其赋值,对于同种结构体的变量,可以直接对其赋值,例如上述代码的Person p3=p1;最后p3的内容将与p1的内容相同。 注意:两个...
  • cuda中结构体的赋值

    千次阅读 2014-01-22 16:01:18
    //将数据从显存拷贝到内存中,也需要使用过渡变量来完成,先拷贝结构体变量,然后在拷贝基本类型数据 data tmp1; cudaMemcpy(&tmp1, d_input, sizeof(data), cudaMemcpyDeviceToHost); vn VN1; cudaMemcpy(&...
  • 1、strcmp函数是判断两个字符串数组大小,有==0 和!= 0 两种情况。 2、 //制作一个简易电话簿,具有输入、存储、排序、管理、查找功能 #include <iostream> using namespace std; struct ...
  • 注意:结构体中放赋值函数,结构体仍旧能定义写法 #include <iostream> #include<cstdio> #include<algorithm> #include<queue> #include<map> #include&...
  • map中结构体的赋值

    2012-02-20 19:28:48
    /************************************************************************/ /* pair对象创建和使用 */ /********************************************************************...怎么传结构体啊? 怎么改啊?
  • 网址:... 在看linux源码时候,经常会看到类似于下面的结构体赋值的代码: struct device my_dev= { .bus=&my_bus_type, .parent=&my_bus, .release=...
  • #include //第一种方式 struct Student { int age; float score; char sex; }; /*//第二种方式 struct Student2 { int age; float score; char sex; }st2; //第三种方式 struct { ... floa
  • C语言中结构体直接赋值

    万次阅读 多人点赞 2018-10-21 10:47:29
    简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。 我们先下面一段代码: 1 2 3 4 5 6 ...
  • 结构体赋值时深度拷贝 ,要注意!!!深拷贝是将对象及值复制过来,两个对象修改其中任意值另一个值不会改变。   #include using namespace std; struct node{ int v; }a[ 100005 ]; int main()...
  • 就是想知道,结构体A和结构体B内都有结构体C,结构体B内的结构体C是从结构体B赋值过来,如果之后结构体A被释放了,结构体B有没有影响。 应该就是深复制,浅复制问题吧。 我用下面代码试了一下,认为应该...
  • http://blog.chinaunix.net/uid-24807808-id-3219820.html
  • struct file_operations globalvar_fops={ .owner=THIS_MODULE, .read=globalvar_read, .write=globalvar_write, .open=globalvar_open, .release=globalvar_release,};

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,240
精华内容 1,696
关键字:

结构体的赋值