关于指针赋初值为NULL的问题

因为NULL本质就是0,则,一个指针变量的值为0,意味着它指向整个内存的最开始字节处,而这个地方是用户程序(APP)的禁区,不能访问,如果强行访问,则,将被OS禁止并中断这个进程执行(程序被中断)。

上述说法,不能说指针的值不能为NULL,只是说,不能对0编号开始的空间进行“访问”。即,可以令指针指向0编号区域,只要不访问就没有问题。

【软件工程】建议所有的变量(尤其是局部变量)都应该初始化为0(NULL)。这里,对于指针变量初始化为NULL的目的在于:区分垃圾数据!

int *p;

int x;

if(x > 0)

p = (int *)malloc(…);

x = …;

// 在此处,无法识别p是否已经指向一段申请了的空间!

if(p是否指向了有效空间)

此时无法判断p是否指向了有效空间,为此,需要进行如下调整:

int *p = NULL;

int x;

if(x > 0)

p = (int *)malloc(…);

x = …;

if(p == NULL)

// p没有指向有效空间

else

// p指向了有效空间

关于指针赋初值为NULL的问题相关推荐

  1. c++new时赋初值_C高级编程精髓之内存管理,万千码农踩过的雷,大神带你走出雷区...

    今天给大家分享C高级编程精华片之内存管理--欢迎跟大家一起踏进内存这片雷区,然后带大家从雷区中走出来! 程序员们经常编写内存管理程序,往往提心吊胆.如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并 ...

  2. c语言字符串赋初值并输出字符,C语言字符串使用指南

    写在前面:学习的第一门语言是Java,之前对C也了解一点,也只是了解一点,在加上长时间没有接触了,基本就只会一个Hello World了.现在由于准备升本考试,不得不从头开始学C.这里从零开始,记录C ...

  3. 【Groovy】集合声明与访问 ( 使用 [] 创建 ArrayList 和 LinkedList 集合 | 集合赋初值 | 使用下标访问集合 | 使用 IntRange 作为下标访问集合 )

    文章目录 一.使用 [] 创建集合 1.使用 [] 创建 ArrayList 集合 2.使用 [] 创建 LinkedList 集合 二.访问集合中的元素 1.集合赋初值 2.使用下标访问集合元素 ( ...

  4. java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享

    一. JDK/JRE/JVM 三者之间的联系与区别 JDK:开发者提供的开发工具箱,是给程序开发者用的.它包括完整的JRE(Java Runtime Environment),Java运行环境,还包含 ...

  5. 拷贝构造,深度拷贝,关于delete和default相关的操作,explicit,类赋初值,构造函数和析构函数,成员函数和内联函数,关于内存存储,默认参数,静态函数和普通函数,const函数,友元

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.第二种初始化的方式是直接在构造方法里面实现初始化. 案例如下: ...

  6. c语言中给xyz赋初值的程序,C语言程序-中国大学mooc-题库零氪

    第1周:程序设计与C语言 第1周编程练习 1.输出"Hello World" 第2周:计算 1 变量随堂测验 1.给定: int a,b; 以下哪些scanf的使用是正确的? A. ...

  7. vhdl变量赋初值_变量类型、构造器、封装以及 LeetCode 每日一题

    1.成员变量和局部变量 1.1成员变量和局部变量定义 成员变量指的是类里面定义的变量(field),局部变量指的是在方法里定义的变量. 成员变量无须显示初始化,系统会自动在准备阶段或创建该类的实例时进 ...

  8. Java不同长度数组赋值_定义一个数组时可以先不赋初值,但一定要确定数组的长度...

    [多选题]识别层理主要是根据( )这几个方面来识别. [多选题]层理是通过岩石的( )在岩层垂直断面上的突变和渐变所显示出来的一种成层构造. [单选题]在使用JDBC API的PreparedStat ...

  9. 在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...

    <程序设计基础>考试试卷三 1. 判断下面标识符中哪个是C语言中合法的用户定义标识符: A. a-b B. #abd C. typedef D. _max 2. -b?在内存中占个字节,& ...

  10. c#数组赋初值_JavaScript数组的声明、访问和遍历方法

    1.数组的概念:数组就是使用单独的变量名来存储一系列的值.当你要存储100个相同概念的数据时,比如学生信息,如果要创建100个变量是不现实的,使用数组变量,就可以存储这100个数据.JavaScrip ...

最新文章

  1. git clean和git reset结合用法
  2. HDU2196[树形dp+二次扫描]java和c++版本题解
  3. ielts writing
  4. 微信基于时间序的海量存储扩展性与多机容灾能力提升
  5. 在业务层实现校验请求参数
  6. 函数重载 覆盖 隐藏
  7. linux临时启动进程命令,Linux常用命令(一)服务控制及优化启动过程
  8. linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
  9. c语言数据类型、运算符和表达式
  10. cocos2dx的runAction: 反复运行,多个动作连接运行,多个动作同一时候运行的实现
  11. Android4.0源码目录结构详解
  12. py 操作Mysql数据库
  13. 低调的华丽:从服务器开发的角度认识 asp.net 中的回调技术
  14. 用大约 10 万字的内容对 Java 的核心知识点和常见的 1000 多道面试题,做了详细的介绍
  15. 计科之路--linux学习
  16. 图片处理系列一Android照片墙应用实现(绝对不崩溃)
  17. Linux-通过LVM对服务器磁盘进行动态扩容
  18. Win11的系统环境变量在哪
  19. Java openjudge javastudy 8
  20. 【AI】在线网站随机生成假头像、不同头像

热门文章

  1. html中div中加背景图片,div background css设置div背景图片
  2. Java 中status意思_struts2中iterator里属性status=stat什么意思
  3. 智能建造如何转型升级?智慧工地引领建筑行业智能化信息化发展
  4. 批量删除文件到回收站
  5. CAD中怎么管理线缆CAD图层?
  6. TM32F103C8T6(晶振电路,复位电路,调试下载串口详解)
  7. EV充电插头相关知识学习了解
  8. Veu表达与v-model
  9. 4G 网络跟 5G 的区别
  10. Python数据分析将数组的多行元素首尾相连为一行numpy.ravel()