鱼C论坛

 找回密码
 立即注册
查看: 2677|回复: 0

[技术交流] 《带你学C带你飞》第二十五讲:void指针和NULL指针

[复制链接]
发表于 2018-1-15 11:24:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2018-1-15 11:26 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢

一、void类型和void指针
(1)void 即的字面意思是“无类型”,定义变量的时候,我们通过类型来决定该变量所占的内存空间。
比如在我们的系统中,char 类型占 1 个字节,int 类型占 4 个字节,double 类型占 8 个字节等。那 void 既然是无类型,我们就不应该用它来定义一个变量,如果你一定要这么做,那么程序就会给你报错!

(2)void 指针我们把它称之为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给 void 指针。

(3)但是void指针赋值给其它任意类型的指针呢?那就需要加上强制类型转换了,就是在前面加上”(类型 *)“,使其转换为对应类型的指针。如下图所示:
1.PNG

(4)注意
1.不要直接对 void 指针进行解引用,因为编译器不知道它所指向的数据类型
2.使用 void 指针一定要小心,由于 void 指针可以包罗万象的特性,间接使得不同类型的指针转换变为合法
3.字符串在C语言中,由一个特殊的约定:你只需要指向这个字符串的起始地址,然后它会一个字节字节的读下去,直到遇到结束符(“\0”)。所以我们在下面的例子中可以输出“Fishc”这个字符串。
2.PNG

二、NULL 指针
(1)在 C 语言中,如果一个指针不指向任何数据,我们就称之为空指针,用 NULL 表示。
这样写:
int *p=NULL
(2)NULL 其实是一个宏定义:因为在大部分系统中,地址 0 通常是一个不被使用的地址。所以,如果一个指针指向 NULL,那么就意味着该指针不指向任何东西。
define NULL ((void *)0)
(3)一个良好的编程习惯是:当你还不清楚要将指针初始化为什么地址时,请将它初始化 NULL;在对指针进行解引用时,先检查该指针是否为 NULL。这种策略可以为你今后编写大型程序节省大量的调试时间。

三、NULL 不是 NUL
(1)你也许在 ASCII 字符表中看到 NUL 的字符,但要注意,它们不是我们今天讲的 NULL。NUL 是 ASCII 字符的缩写,表示的是字符串结束符 '\0'。虽然它的值也是 0,但两者的目的和用途是完全不同的。

(2)NULL 用于指针和对象,表示指向一个不被使用的地址。而 '\0' 我们非常熟悉了,它表示字符串的结尾。所以两者的概念是不同的,为了更好地进行编程,请大家严肃地进行区分。


谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 09:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表