数据结构 学习笔记之:结构体及其所定义变量的内存分配的问题

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:

http://blog.csdn.net/dcx1205

相信不会让您失望!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

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

一、当定义一个结构体类型后,在未定义结构体变量之前,系统是否会为其分配内存空间?

答:定义一个具体的结构体类型,仅是在本程序中增加了一种数据类型,系统并不会为其分配空间。
    只有当使用所定义的结构体类型定义了变量后,系统才会为所定义的变量分配相应内存空间。

二、
(1)SEQSTACK *pS;//定义一个指向结构体的指针 
(2)pS = (SEQSTACK *)malloc(sizeof(SEQSTACK));

问:为什么要使用malloc为结构体类型指针分配内存空间?

答:1)定义的结构体指针只是说明这个指针是指向这个结构体的,但系统并未给它分配内存空间,
       这就类似于声明,只是告诉系统这个指针是干什么用的,但它指向地址是未知的。
   
    2)SEQSTACK *pS;//pS本身占用4个字节的空间(因为它是指针),并且指向一个未知不可用的内存空间,
       所以使用之前需要为它分配一个确定的内存空间,系统是不会自动为他分配内存空间的,
       这个分配就是用malloc来进行的。
   
    3)指针必须指向地址才能使用,其使用的实际为自己指向的地址,就像变量使用的实际为它的值一样。
三、
(1)SEQSTACK stk;//定义一个结构体类型的变量
(2)SEQSTACK *pS;//定义一个指向结构体的指针
(3)pS = &stk;//pS指向变量stk

问:系统为结构体变量stk分配了内存空间吗?
答:如果定义一个结构体变量,系统会自动为其分配内存空间,
    若定义一个结构体的指针,系统就不会自动为其分配空间。


   

你可能感兴趣的:(数据结构,C/C++)