变量内存
type fun(**)
{
struct node p;
p=new strucrt node;
}
局部变量是在栈上,函数结束,自动释放。
开辟内存在堆上存储,函数结束时,不会自动释放,必须手动释放。
所以 p的地址会被释放。new struct node 不会。
附加,new 建立 delete 删除 而且函数是c++里面的
malloc 建立 必须用 free 释放 c语言里面的
问题二:
p=NULL ,p->next =NULL
在C/C++中,遍历到最后一个节点时,p->next == NULL,但是 p->data,即数据域里还是有数值的,所以此时 p! =NULL
这是习惯写法。一般都把NULL定义成(void *)0,如果直接p=0;编译器会告警,说把一个整型赋给一个指针型。
2. NULL一般都用于表示空指针,p=NULL就表示把p指向一个无效空间地址
3. p指向NULL的无效空间地址后,对这个地址赋值就是非法的。只有把p指向一个有效地址空间才可以对它指向的内存写入内容,即可执行*p=XX操作.
#include<stdio.h>
struct node
{
int a;
struct node *next;
};
int main()
{
struct node *p;
p=NULL;
if(p->next==NULL)
printf("1");
else
printf("2");
return 0;
}
程序运行不出来。