C语言进阶——指针

指针强化

  • 指针是一种数据类型

指针变量

  • 指针是一种数据类型,占用内存空间,用来保存内存地址

空指针

  • 不允许向NULL和非法地址拷贝内存
  • 可以释放

野指针

  • 未初始化指针
  • malloc后也free了,但是指针没有置空
  • 指针操作超越变量作用域
  • 不可以释放,因为没有权限操作空间

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//1、空指针 不允许向NULL和非法地址拷贝内存
void test01()
{
   
        //char *p = NULL;
        给p指向的内存区域拷贝
        //strcpy(p, "1111");//err
        //char*q = 0x1122;
        给q指向的内存区域拷贝内容
        //strcpy(q,"2222");//err
}
int *doWork()
{
   
        int a = 10;
        int *p = &a;
        return p;
}
//2、野指针
void test02()
{
   
        //int *p;//未初始化指针 会出错
        //printf("%d\n",*p);
        //2.malloc后也free了,但是指针没有置空
        //int *p = malloc(sizeof(int));
        //*p = 100;
        //free(p);//野指针
        //p = NULL;//将free后的指针要进行置空,防止野指针的出现
        //printf("%d\n", *p);
        //2、指针操作超越变量作用域
        int *p2 = doWork();
        printf("%d\n",*p2);
        printf("%d\n", *p2);
}
void test03()
{
   
        int *p = NULL;
        free(p);//空指针是可以释放的
        free(p);
        int *p2 = malloc(4);
        free(p2);
        free(p2);//野指针不可以释放的
}
int main()
{
   
        //test01();
        test02();
        system("pause");
        return EXIT_SUCCESS;
}
C/C++基础 文章被收录于专栏

本专栏收录C/C++编程语言相关知识

全部评论

相关推荐

09-29 16:59
已编辑
门头沟学院 Java
牛客96609213...:疯狂背刺,之前还明确设置截止日期,还有笔试,现在一帮人卡在复筛,他反而一边开启扩招,还给扩招的免笔试,真服了,你好歹先把复筛中的给处理了再说
投递大疆等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务