zoukankan      html  css  js  c++  java
  • C语言结构体赋值2

    #include <stdio.h>
    
    
    /** 
        上一个版本的name是固定大小的,不好,这次换用 *name然后 采用 堆的方式申请内存,起到用到少拿多少的一个方式。
    */
    struct student{
    
        int ID;
        char *name;
        int age;
    
    };
    
    struct test{
    
        char str[50];
    
    };
    
    void func1(void);
    void func2(void);
    int main(){
    
        //func1();
        struct test t1 = { "hello world" };
        struct test t2;
        t2 = t1;
        printf("%s
    ",t2.str);
        //除了内存设置函数memset(起始地址,设置值,长度)以外,还有一个内存拷贝函数,memcpy(目标地址,源地址,拷贝长度);
        struct test t3;
        memcpy(&t3, &t1, sizeof(t1));
        printf("%s
    ",t3.str);
    
    
    
    
        
        getchar();
        return 0;
    
    
    
    
    
    }
    void func1(void){
        struct student s1;
        s1.ID = 1;
        s1.name = malloc(sizeof(char)* 5);
        strcpy(s1.name, "李飞");//s1.namef本身就是一个地址,再取地址,成什么了!?
        s1.age = 24;
        printf("s1的学号是:%d,姓名:%s,年龄%d
    ", s1.ID, s1.name, s1.age);
        //使用之后记得释放。
        free(s1.name);
    
        //通过一个指针链接到s1
        struct student *ps;
        ps = &s1;
        ps->ID = 2;
        ps->name = malloc(sizeof(char)* 7);
        ps->age = 25;
    
        strcpy(ps->name, "letben");
        printf("指向后s1的学号是:%d,姓名:%s,年龄%d", s1.ID, s1.name, s1.age);
        //再次忘记了释放内存。
        free(ps->name);
    
    }
    
    void func2(void){
    
    }
  • 相关阅读:
    十七、mysql数据库备份
    消费端ACK和重回队列
    RabbitMQ TTL、死信队列
    消费端限流策略
    029异常处理
    028class_part2
    027class_part1
    026json和pickle,xml模块
    025__name__变量和目录结构规范
    024模块的概念
  • 原文地址:https://www.cnblogs.com/letben/p/5240363.html
Copyright © 2011-2022 走看看