在C语言编程中,为啥要将指针变量在开始的时候赋值为NULL?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C语言编程中,为啥要将指针变量在开始的时候赋值为NULL?相关的知识,希望对你有一定的参考价值。

参考技术A 防止指针在未赋值的情况下的误用,比如指针未赋值,即向其指向的地址赋值,往往会导致轻则程序崩溃,重则系统崩溃(实际上现代操作系统多数对其已有防护),在嵌入式领域还有可能直接导致硬件损坏等事故
而一般系统对NULL是有写保护的(甚至有读保护),所以一般不会出现重大问题
而且好的编程风格一般要求检查指针是否为NULL后再进行操作,所以进一步的规避了上述风险

C 语言----- 指针

  指针是一个值为内存地址的变量, 指针的核心是它是一个变量, 只不过它是用来存放内存地址的。在了解指针之前,先说一下什么是变量。变量就是在内存中开辟的一个空间。如int year, 就是在内存中开辟了一个空间,空间名称为year, 开辟空间做什么呢?肯定是存放程序运行中所需要的东西,在计算机语言中,存放东西就是赋值。year= 2018, 给year赋值,就是在year这个空间存放一个整数2018; 开辟了空间,也存放了数值,那我们要使用这个空间中的东西怎么办?我们怎样才能找到这个空间?当然,最简单的办法,是直接使用名称year, 其实还有一种办法,就是找到这个空间的地址,找到地址后,我们就可以做任何事情了。内存在开辟空间的时候,它自动就会有一个地址,这个地址就是内存地址,这和我们日常生活也是一样的道理。比如开发商拿了一块地,它就相当于开辟了空间。拿地的同时,也就是开辟空间的时候,它自动会有一个地址,他在广东省拿的地,地址肯定是广东省,而不是北京,并且地址也不会再发生变化。只不过地址描述方式不同,在现实生活中,它是广东省深市圳,而在计算机中,它是一个十六进制的数字发, oXc522;

  每一个变量都有地址,我们想要操作这个地址,就要把地址获取到并保存起来,保存东西就是用 变量, 这个变量保存内存地址,所以起了个名字就是指针。指针的变量的声明也不一样,用* 声明。 int *point_year.  怎么获取变量地址用&  &year 就取得了year内存地址, 那么它就可赋值组point_year 变量。 point_year = &year,  point_year 保存的是year的内存地址,所以也可以称之为point_year 指向了year.   在这里有一个特数的常量,NULL, 表示为空, 如point_year = NULL, 表示指针不指向任何地址。

当* 作为运算符的时候,叫做取地址所对应的值,所以它只能放在指针变量的前面, 取出地址所指向的值,那就是变量。*point_year 的值就是变量year.  *point_year = 10; 其实就是对量year赋值。

   指针变量也是变量,所以它也有地址,&point_year 就是取指针变量对应的地址。它是一个地址,所以还要声明一个指针变量 int *ptr_ptr_year = &point_year.  那么我们*运算符也是可以取地址*ptr_ptr_year返回的是point_year, 然而它也是一个指针变量,*point_year 才是指向的变量。**ptr_ptr_year 批向了year,  **ptr_ptr_year = 10, 同样是给它变量year赋值。

以上是关于在C语言编程中,为啥要将指针变量在开始的时候赋值为NULL?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中能否直接给指针指向的数据赋值?为啥?

c语言 这段代码是啥意思,结果为啥是20,20

C语言指针赋值?

C 语言指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )

C语言:if(条件) 条件是一个指针变量,它啥时候为真?

c语言char和int可以互相赋值,但指针不能赋值,char *和int *不能直接赋值,为啥呢?谢谢