现在的位置: 首页 > 综合 > 正文

数据结构 学习笔记之:关于顺序栈中给结构体类型指针分配内存时,使用malloc和不使用malloc的疑惑!求高手解答……

2013年09月02日 ⁄ 综合 ⁄ 共 1068字 ⁄ 字号 评论关闭

////////////////////////////////////////////////////////////////////////////////
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
相信不会让您失望!!
////////////////////////////////////////////////////////////////////////////////
//顺序栈的C语言实现
//大家请看最后用两种方式实现的main函数
#include <stdio.h>
#include <math.h>
#include <stdlib.h> 

#define TRUE  1
#define FALSE 0
#define STACK_SIZE 5
typedef int ElementType; 

//定义结构体
typedef struct SeqStack 
{
    ElementType array[STACK_SIZE];
    ElementType top;
}SEQSTACK; 

//……与问题无关的函数代码均已省略……

//情况1
int main(void)
{
    SEQSTACK *pS;//定义一个指向结构体变量的指针	
    pS = (SEQSTACK *)malloc(sizeof(SEQSTACK));
    if (pS == NULL)
    {
        return FALSE;
    }

    InitStack(pS);//初始化
    PushStack(pS, 1);//压栈
    PushStack(pS, 2);
    PushStack(pS, 3);
    PushStack(pS, 4);
    PushStack(pS, 5);

    TraStack(pS);//遍历栈

    free(pS);//释放pS所占内存空间

    return 0;
}

/*
//情况2
int main(void)
{
    SEQSTACK STK;//定义一个结构体类型的变量
    SEQSTACK *pS;//定义一个指向结构体变量的指针	
    pS = &STK;//将结构体变量的地址赋给指针

    //下面函数的参数使用pS和&STK是等效的
    InitStack(pS);//初始化  
    PushStack(&STK, 1);//压栈
    PushStack(pS, 2);
    PushStack(&STK, 3);
    PushStack(pS, 4);
    PushStack(&STK, 5);

    TraStack(pS);//遍历栈

    return 0;
}
*/

//请问情况1和2有什么区别啊?
//是情况1好还是2好?为什么呢?
//注:情况1和2的运行结果是一样的。

 

 

抱歉!评论已关闭.