介绍

#include <stdio.h>
#include <malloc.h> int main(void) { int *p; //定义了一个指针变量,但并没有为期附初值;下面两个函数都是为其fu初值的操作 f(&p); //f函数,为指针变量p附了一个准确的值,所以是正确的操作 //g(&p);//g函数,虽然在g函数执行过程中未p附了一个准确的值,但g函数执行结束后指针变量的值,并非是一个准确的值 return 0; } void f(int ** q) { *q = (int *)malloc(4); // 动态分配的内存,程序员不手动释放的话,操作系统并不会自动为其释放内存 } void g(int ** q) { int r; //静态分配的内存,在该函数(g)调用完毕后,操作系统自动为期释放内存(出栈) *q = &r; }
//要想实现跨函数使用内存,只能通过使用动态内存的方法

例子

#include <stdio.h>
#include <malloc.h>

struct Student
{
    int sid;
    int age;
};
struct Student * CreateStudent(void);
void ShowStudent(struct Student *);

int main(void)
{
    struct Student * ps;
    ps = CreateStudent();
    ShowStudent(ps);
    return 0;
}

void ShowStudent(struct Student * pst)
{
    printf("%d %d\n", pst->sid, pst->age);
}

struct Student * CreateStudent(void) 
{
    struct Student * p = (struct Student *)malloc(sizeof(struct Student));
    p->sid = 99;
    p->age = 88;
    return p;
}
/*
输出结果:99 88
*/

 

posted on 2015-04-04 21:34  骨豆猫宁  阅读(165)  评论(0编辑  收藏  举报