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

    2014-08-28 10:51:34
    c语言结构体可直接赋值

    c语言结构体可直接赋值,赋值操作等同于内存拷贝。

    struct A{
        int a
    }a1,a2;
    a1.a = 6;
    a2 = a1;
    printf("a2.a = %d\n", a2.a);

    打印结果是:

    a2.a = 6


    注:及时结构体包含数组也是可以直接赋值的。但是这种赋值只是浅拷贝。也就是说如果结构体中包含指针,那么指针指向的内容是不会拷贝的,拷贝的只是指针本身。

    展开全文
  • 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语言部分有些容易忘记的内容,这样贴在这里方便大家学习和查阅本章节里面有结构体和数组长度的问题。欢迎大家来点评#include#include//结构体struct student{ int age; char name[20]; char sex [4];};//结尾必须有...
  • C语言结构体赋值问题

    千次阅读 2016-08-12 10:08:54
    本身做Java比较多,直接在C中将一个结构体赋值给另一个结构体时,不太确定会发生什么事。下面写了一个小例子测试。 结论是: 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语言结构体赋值2

    2016-03-03 22:27:00
    #include <stdio.h> /** 上一个版本的name是固定大小的,不好,这次换用 *name然后 采用 堆的方式申请内存,起到用到少拿多少的一个方式。 */ struct student{ int ID;... ch...
  • 结构体blog的值无法正确赋值给ctx->blobs[0]。 结构体作为函数参数时传值的,那应该没有任何问题。更奇怪的是我在asn1_init函数里加了那条printf,就可以神奇的变好。 高手能看出什么问题吗? void asn1_...
  • 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");
  • 1 对成员赋值.例如结构体struct st1 {int a;int b;int c;}1.1 用{}形式.struct st1 st1 = {1,2,3);1.2 linux kernel风格.struct st1 st1 =...
  • 说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子:#include struct student{int a;int b ;int c ;};struct student array1[1000] ;int main(void){int i ;for(i = 0 ; i < ...
  • 2011-11-23求解C语言中建立一个对链表按照学==========================功能:选择排序(由小到大)返回:指向链表表头的指针==========================*//*选择排序的基本思想就是反复从还未排好序的那些节点中,...
  • 1.先定义结构体类型再定义变量名一般形式:struct 结构体类型名 {成员列表}; struct 结构体类型名 变量名列表;struct student {int num; char name[20]; char sex; int age; float score; char addr[30]; }; ...
  • C语言结构体变量之间可以进行赋值操作吗?简单结构体赋值先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化。简单结构体(不包含指针成员)直接赋值没有问题。我们先下面一段代码:...
  • C语言结构体初始化的四种方法

    万次阅读 多人点赞 2018-03-15 17:17:19
    定义 struct InitMember { int first;...方法一:定义时赋值 struct InitMember test = {-10,3.141590,"method one",0.25}; 需要注意对应的顺序,不能错位。 方法二:定义后逐个...
  • C语言 C语言中,结构体是一篇连续的内存空间,使用=赋值操作,底层用到的就是memcpy; 如果结构体中有指针变量;操作后。两个指针指向的同一块区域,而不会分配新的区域; struct S { int a; char * b; }; int main...
  • C语言结构体详细教学开始前面的教程中我们讲解了数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,...
  • C语言 结构体变量赋值

    千次阅读 2019-05-30 17:08:24
    typedef struct { u16 year; u8 month;...1)C语言中,在相同类型的变量间赋值时是直接内存复制的; 2)两个同类型的结构体变量属于同一种变量; 3)如果结构体内含有指针,注意拷贝的深度;
  • 今天小编就为大家分享一篇关于C语言结构体数组同时赋值的另类用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • C语言结构体能否整体赋值

    千次阅读 2020-09-01 17:54:17
    C语言结构体的能否整体赋值 先放结论 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量,但是需要满足一个条件。 整体赋值规则 ansi/iso C规定:“相同类型的结构体是可以直接赋值的”; 合法赋值: 如...
  • C语言结构体数组赋值问题

    万次阅读 2008-03-02 14:14:00
    C语言结构体数组赋值问题 悬赏分:50 - 解决时间:2007-5-16 12:19结构体数组赋值问题我在使用结构体数组的时候遇到这个问题,想了好长时间也没弄明白其中的原因,程序如下: main() { struct abc { char name;...
  • c语言结构体可以直接赋值

    千次阅读 2018-12-12 15:52:58
    c语言结构体可以直接赋值 结构体直接赋值的实现 下面是一个实例: #include &amp;lt;stdio.h&amp;gt; struct Foo { char a; int b; double c; }foo1, foo2; //define two structs with three...
  • C语言结构体C语言结构体指针,java对象引用,传值,传地址,传引用 传值 把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址...
  • 今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,...那么就总结一下C语言结构体赋值的问题吧: 结构体直接赋值的实现 下面是一个实例: #include <...

空空如也

空空如也

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

c语言结构体赋值

c语言 订阅