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

    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语言中的赋值,取值,在汇编看来都是先取到要操作元素的地址,然后根据地址操作...结构体赋值struct persion { char sex; char name[8]; int height; }; int fun(void) { struct persion per; per.sex='...

    404a18f72c3af063ef330534568d665c.png

    C语言中的赋值,取值,在汇编看来都是先取到要操作元素的地址,然后根据地址操作元素,元素为基本数据类型。

    结构体赋值

    struct persion
    {
            char sex;
            char name[8];
            int height;
    };
    
    
    int fun(void)
    {
            struct persion per;
    
            per.sex='m';
            per.name[0]='a';
            per.name[1]='d';
            per.name[2]=0;
            per.height=170;
    
            return 0;
    }
    

    汇编代码

            pushl   %ebp
            movl    %esp, %ebp
            subl    $16, %esp
            //per.sex='m';
            movb    $109, -16(%ebp)
            //per.name[0]='a';
            movb    $97, -15(%ebp)
            //per.name[1]='d';
            movb    $100, -14(%ebp)
            //per.name[2]=0;
            movb    $0, -13(%ebp)
            //per.height=170;
            movl    $170, -4(%ebp)
            //返回值
            movl    $0, %eax
            leave
            ret

    结构体指针赋值

    struct persion
    {
            char sex;
            char name[8];
            int height;
    };
    
    
    int fun(void)
    {
            struct persion per;
            struct persion *p;
    
            p=&per;
    
    
            p->sex='m';
            p->name[0]='a';
            p->name[1]='d';
            p->name[2]=0;
            p->height=170;
    
            return 0;
    }
    

    汇编代码

            pushl   %ebp
            movl    %esp, %ebp
            subl    $32, %esp
            //&per
            leal    -20(%ebp), %eax
            //p=&per
            movl    %eax, -4(%ebp)
            //p->sex='m'
            movl    -4(%ebp), %eax
            movb    $109, (%eax)
            //p->name[0]='a';
            movl    -4(%ebp), %eax
            movb    $97, 1(%eax)
            //p->name[1]='d';
            movl    -4(%ebp), %eax
            movb    $100, 2(%eax)
            //p->name[2]=0;
            movl    -4(%ebp), %eax
            movb    $0, 3(%eax)
            //p->height=170;
            movl    -4(%ebp), %eax
            movl    $170, 12(%eax)
            //返回值
            movl    $0, %eax
            leave
            ret

    结构体复制

    struct persion
    {
            char sex;
            char name[8];
            int height;
    };
    
    
    int fun(void)
    {
            struct persion per={'m',{'a','d',0},170};
            struct persion per2;
    
            per2=per;
    
            return 0;
    }

    汇编代码

            pushl   %ebp
            movl    %esp, %ebp
            subl    $32, %esp
            //per赋值为0
            movl    $0, -16(%ebp)
            movl    $0, -12(%ebp)
            movl    $0, -8(%ebp)
            movl    $0, -4(%ebp)
            //per.sex='m';
            movb    $109, -16(%ebp)
            //per.name[0]='a';
            movb    $97, -15(%ebp)
            //per.name[1]='d';
            movb    $100, -14(%ebp)
            //per.height=170
            movl    $170, -4(%ebp)
            //per2=per
            movl    -16(%ebp), %eax
            movl    %eax, -32(%ebp)
            movl    -12(%ebp), %eax
            movl    %eax, -28(%ebp)
            movl    -8(%ebp), %eax
            movl    %eax, -24(%ebp)
            movl    -4(%ebp), %eax
            movl    %eax, -20(%ebp)
            movl    $0, %eax
            leave
            ret

    由于per结构体大小是4的倍数(这是编译器规定的),所以使用movl -16(%ebp), %eax,movl %eax, -32(%ebp)来赋值。

    展开全文
  • C语言中的赋值,取值,在汇编看来都是先取到要操作元素的地址,然后根据地址操作...结构体赋值struct persion { char sex; char name[8]; int height; }; int fun(void) { struct persion per; per.sex='...

    8b3e3d0af75c61802b675f49446c197f.png

    C语言中的赋值,取值,在汇编看来都是先取到要操作元素的地址,然后根据地址操作元素,元素为基本数据类型。

    结构体赋值

    struct persion
    {
            char sex;
            char name[8];
            int height;
    };
    
    
    int fun(void)
    {
            struct persion per;
    
            per.sex='m';
            per.name[0]='a';
            per.name[1]='d';
            per.name[2]=0;
            per.height=170;
    
            return 0;
    }
    

    汇编代码

            pushl   %ebp
            movl    %esp, %ebp
            subl    $16, %esp
            //per.sex='m';
            movb    $109, -16(%ebp)
            //per.name[0]='a';
            movb    $97, -15(%ebp)
            //per.name[1]='d';
            movb    $100, -14(%ebp)
            //per.name[2]=0;
            movb    $0, -13(%ebp)
            //per.height=170;
            movl    $170, -4(%ebp)
            //返回值
            movl    $0, %eax
            leave
            ret

    结构体指针赋值

    struct persion
    {
            char sex;
            char name[8];
            int height;
    };
    
    
    int fun(void)
    {
            struct persion per;
            struct persion *p;
    
            p=&per;
    
    
            p->sex='m';
            p->name[0]='a';
            p->name[1]='d';
            p->name[2]=0;
            p->height=170;
    
            return 0;
    }
    

    汇编代码

            pushl   %ebp
            movl    %esp, %ebp
            subl    $32, %esp
            //&per
            leal    -20(%ebp), %eax
            //p=&per
            movl    %eax, -4(%ebp)
            //p->sex='m'
            movl    -4(%ebp), %eax
            movb    $109, (%eax)
            //p->name[0]='a';
            movl    -4(%ebp), %eax
            movb    $97, 1(%eax)
            //p->name[1]='d';
            movl    -4(%ebp), %eax
            movb    $100, 2(%eax)
            //p->name[2]=0;
            movl    -4(%ebp), %eax
            movb    $0, 3(%eax)
            //p->height=170;
            movl    -4(%ebp), %eax
            movl    $170, 12(%eax)
            //返回值
            movl    $0, %eax
            leave
            ret

    结构体复制

    struct persion
    {
            char sex;
            char name[8];
            int height;
    };
    
    
    int fun(void)
    {
            struct persion per={'m',{'a','d',0},170};
            struct persion per2;
    
            per2=per;
    
            return 0;
    }

    汇编代码

            pushl   %ebp
            movl    %esp, %ebp
            subl    $32, %esp
            //per赋值为0
            movl    $0, -16(%ebp)
            movl    $0, -12(%ebp)
            movl    $0, -8(%ebp)
            movl    $0, -4(%ebp)
            //per.sex='m';
            movb    $109, -16(%ebp)
            //per.name[0]='a';
            movb    $97, -15(%ebp)
            //per.name[1]='d';
            movb    $100, -14(%ebp)
            //per.height=170
            movl    $170, -4(%ebp)
            //per2=per
            movl    -16(%ebp), %eax
            movl    %eax, -32(%ebp)
            movl    -12(%ebp), %eax
            movl    %eax, -28(%ebp)
            movl    -8(%ebp), %eax
            movl    %eax, -24(%ebp)
            movl    -4(%ebp), %eax
            movl    %eax, -20(%ebp)
            movl    $0, %eax
            leave
            ret

    由于per结构体大小是4的倍数(这是编译器规定的),所以使用movl -16(%ebp), %eax,movl %eax, -32(%ebp)来赋值。

    展开全文
  • 1结构体赋值 #include <windows.h> struct MyStruct { int a; int b; char c[20]; }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int ..

    1  结构体赋值

    #include <windows.h>
     
    struct MyStruct
    {
        int a;
        int b;
        char c[20];
    };
     
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    	char szBuffer[100];
        struct MyStruct t1 = {101, 202, "hello struct"};
        struct MyStruct t2 = t1;
    	wsprintf(szBuffer, "MyStruct t1: %d, %d, %s",t1.a, t1.b, t1.c);
    	MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);
    	wsprintf(szBuffer, "MyStruct t2: %d, %d, %s",t2.a, t2.b, t2.c);
    	MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);
    	return 0;
    }

    结构体成员直接赋值;也可以把一个结构体变量赋值给另一个同类型的结构体变量,t2 = t1;

    2 有指针成员的结构体赋值

    #include <windows.h>
     
    struct MyStruct
    {
        int a;
        int b;
        char* c;
    };
     
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    	char szBuffer[100];
        struct MyStruct t1;
        t1.a = 101;
        t1.b = 202;
        // 为指针区域赋值
        char *p = (char*)malloc(10*sizeof(char));
        strcpy(p, "hellostru");
        t1.c = p;
        struct MyStruct t2;
        t2 = t1;
        
    	wsprintf(szBuffer, "MyStruct t1: %d, %d, %s",t1.a, t1.b, t1.c);
    	MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);
    	wsprintf(szBuffer, "MyStruct t2: %d, %d, %s",t2.a, t2.b, t2.c);
    	MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);
    
        wsprintf(szBuffer, "t1 pointer addr: %x",t1.c);
        MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);
        wsprintf(szBuffer, "t2 pointer addr: %x",t2.c);
        MessageBox(NULL,szBuffer,TEXT("结构体赋值"),0);
    	    
    	return 0;
    }

    运行如下;后两个消息框输出的是指针地址;

    有指针成员的结构体;t2=t1,会直接将t1的指针变量赋值给t2.c,代码不会出错;

    如果我们在赋值之后将t1所用的资源释放掉,那么使用t2的话则可能导致内存泄漏了。

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

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

    2021-02-25 10:09:34
    我们在使用结构体赋值的时候,习惯使用一项一项的赋值方式: struct student zahngsan; zhangsan.age = 10; zhangsan.id = 1871483469; 或者是按照结构体定义时的顺序依次赋值下去: struct student zhangsan = { ...
  • 将外部相同类型的结构体赋值到共享内存中 崩溃。 1500个变量不会崩溃!2000就会崩溃了。   可能原因一: 是否使用了函数,并在函数中创建了较大的数组,造成栈溢出 可能原因二: 栈 拷贝到 共享内存 ...
  • 今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,...那么就总结一下C语言中结构体赋值的问题吧: 结构体直接赋值的实现 下面是一个实例: #include <...
  • 看到很多C代码的结构体赋值都是用memcpy函数来拷贝,其实根本不需要,用等号直接赋值即可。结构体描述的是的一块连续内存的内存布局,用等号来用一个结构体给另一个结构体赋值,编译不会有任何问题,其效果显然也和...
  • C语言结构体赋值问题

    千次阅读 2016-08-12 10:08:54
    本身做Java比较多,直接在C中将一个结构体赋值给另一个结构体时,不太确定会发生什么事。下面写了一个小例子测试。 结论是: C结构体直接复制类似于深拷贝,改变被修改的结构体不会影响到原来的结构体。 代码: ...
  • 最近发现一种比较方便的方式来对结构体进行赋值,那就是通过点号来赋值。 实例代码如下 struct { int a, b, c, d;...另外一个例子如下,可以直接对嵌套的结构体赋值。 #include <stdio....
  • ios 给自定义结构体赋值

    千次阅读 2015-12-24 15:52:20
    ios 给自定义结构体赋值 模仿CGRectMake、CGPointMake等
  • go 指针结构体赋值1、前言2、举例3、分析4、解决 1、前言 日常生产中,当我们使用go指针结构体赋值时,会报出invalid memory address or nil pointer dereference错误,那错误是如何产生的呢,我们该如何解决呢 2、...
  • c语言——结构体赋值 结构体赋值1 struct Person { char name[64]; int age; }; void test01() { struct Person person1 = { "aaa", 20 }; struct Person person2 = { "bbb", 30 }; //赋值操作 person1 = ...
  • 结构体赋值操作2. 结构体套指针3. 深拷贝和浅拷贝4. 结构体的偏移量强化 知识点: 1. 结构体赋值操作 结构体赋值相当于是(内容)赋值操作 Student stu1 = {"Eastrise",25}; Student stu2; // strcpy(stu2....
  • c语言结构体赋值问题

    2013-09-26 19:12:00
    对于结构体赋值问题: 1 static psl{ 2 int a; 3 char ch; 4 }; 我过去一般会对结构体这样赋值: static psl pslname = { 10, 'b', }; 记住有一点,‘b’ 后面的逗号可有可无,至于具体为...
  • C语言中结构体赋值问题的讨论 ...今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样...那么就总结一下C语言中结构体赋值的问题
  • 在项目调试过程中,碰到 一个这样的问题,c++结构体赋值问题。在c语言中,一个结构体变量是可以赋值给另外一个结构体变量的。在c++情况有所变化,仅此记录一下. 此为一个概率事件。 //定义接收数据数据,对内发布的...

空空如也

空空如也

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

结构体赋值