关于C语言未初始化的指针和空指针

指针p定义的同时初始化,这样可以正常运行,代码如下:

#include <stdio.h>
int main()
{
    
    
    int a;
    int *p=&a;
    scanf("%d",p);
    printf("%d",*p);
    return 0;
}

指针初始化为空,此时不能正常运行,代码如下:

#include <stdio.h>
int main()
{
    
    
    int *p=NULL;
    scanf("%d",p);
    printf("%d",*p);
    return 0;
}

似乎空指针也不能使用。

20200505新增
关于指针、动态内存分配的若干思考
1.变量在内存中所占存储空间的首地址,称为该变量的地址,而变量在存储空间中存放的数据,成为变量的值。(之前是因为没有认真看这句话是么,指针变量p中存放的地址都为空,还怎么能给*p赋值呢?皮之不存毛之焉附的感觉)
2.函数malloc():用于分配若干字节的内存空间,返回一个指向该内存首地址的指针。若系统不能提供足够的内存空间,函数将返回空指针NULL
3.释放内存后仍然继续使用
是放了内存却仍然继续使用它——将导致产生野指针。
当指针指向的栈内存空间被释放后,指向它的指针并未消亡,内存被释放后,指针的值其实并没有改变,他仍然指向这块内存,只不过内存中存储的数据变成了随机值(乱码)而已。释放内存的结果只改变了内存中存储的数据,使该内存存储的内容成为辣鸡,指向垃圾内存的指针,被称为野指针。
内存被释放后,指向它的指针不会自动变成空指针,野指针不是空指针

猜你喜欢

转载自blog.csdn.net/weixin_43919570/article/details/105555298
今日推荐