码迷,mamicode.com
首页 > 其他好文 > 详细

C Language Study - 结构体成员指针初始化

时间:2015-03-03 11:45:41      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

结构体成员指针初始化

不可以正确运行的初始化方式(1):

#include <stdio.h>
#include <string.h>
#include <malloc.h>
//#include "a.h"

//char a[100];
struct stu
{
    char* name;
    int num;
}*pst,st;

void init_pst()
{
    pst = (struct stu *)malloc(sizeof(struct stu));
    //pst->name = (char*)malloc(sizeof(char*));
    //pst->num = 0;
}

void free_pst()
{
    free(pst);
}

int main(void)
{
    //strcpy(pst->name,"Jacy");
    //pst->num = 99;
    init_pst();
    //test();
    strcpy(pst->name,"Jacy");
    pst->num = 99;
    printf("%s %c",pst->name,pst->num);
    free_pst();
    return 0;
}

不可以正确运行的初始化方式(2):

#include <stdio.h>
#include <string.h>
#include <malloc.h>
//#include "a.h"

//char a[100];
struct stu
{
    char* name;
    int num;
}*pst,st;

void init_pst()
{
    NULL;
    //pst = (struct stu *)malloc(sizeof(struct stu));
    //pst->name = (char*)malloc(sizeof(char*));
    //pst->num = 0;
}

void free_pst()
{
    free(pst);
}

int main(void)
{
    //strcpy(pst->name,"Jacy");
    //pst->num = 99;
    init_pst();
    //test();
    strcpy(pst->name,"Jacy");
    pst->num = 99;
    printf("%s %c",pst->name,pst->num);
    free_pst();
    return 0;
}


可以正确运行的初始化方式:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
//#include "a.h"

//char a[100];
struct stu
{
    char* name;
    int num;
}*pst,st;

void init_pst()
{
    pst = (struct stu *)malloc(sizeof(struct stu));
    pst->name = (char*)malloc(sizeof(char*));
    pst->num = 0;
}

void free_pst()
{
    free(pst);
}

int main(void)
{
    //strcpy(pst->name,"Jacy");
    //pst->num = 99;
    init_pst();
    //test();
    strcpy(pst->name,"Jacy");
    pst->num = 99;
    printf("%s %c",pst->name,pst->num);
    free_pst();
    return 0;
}


区别是,为整个结构体分配了内存,以及对结构体的指针成员进行了内存分配(指的是将这个指针指向一块合法的内存,不是为自身分配内存,自身内存已经在定义的时候由编译器分配了)


以后的编程习惯:结构体一定义,立马进行初始化内存分配。

C Language Study - 结构体成员指针初始化

标签:

原文地址:http://blog.csdn.net/oimchuan/article/details/44035137

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!