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\n",t2.str);
    //除了内存设置函数memset(起始地址,设置值,长度)以外,还有一个内存拷贝函数,memcpy(目标地址,源地址,拷贝长度);
    struct test t3;
    memcpy(&t3, &t1, sizeof(t1));
    printf("%s\n",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\n", 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){

}

 

posted on 2016-03-03 22:27  木鸟飞  阅读(443)  评论(0编辑  收藏  举报

导航