指针专题6-空指针NULL和void指针
1 NULL指针
一个指针变量可以指向计算机中任何一块内存,不管该内存有没有被分配,也不管该内存有没有使用权限,只要把地址给他,他就可以指向。C语言没有一种机制保证指向内存的正确性,程序员必须自己提高警惕。
比如下面错误的例子,对没有初始化的指针进行操作,这是非常危险的。
char *str;
gets(str);
printf("%s",str);
这段程序编译和链接不会报错,但当输入字符串按下回车,在Linux就会出现段错误(Segment Fault)。因为str是一个未初始化的局部变量,它的值不确定,指向的地址是随机的,很有可能指向一块没有被分配或者没有读写权限的内存,这时使用gets()函数给他写数据显然是错误的。
我们的建议是对没有初始化的指针赋值为NULL。例如:
char *str=NULL;
修改后,运行程序后直接打印出(null),由此猜测gets()和printf()对空指针做了判断。
1.1 NULL指针解释
NULL在C语言表示空指针。NULL是在stdio.h中定义的一个宏,也就是说NULL指向了地址为0的内存。
#define NULL ((void *)0)
1.2 NULL指针用途
第一:指针的初始化
int *p=NULL;
第二:判断字符串是否是空字符串
char *Dprint(char *str)
{
if(str=NULL)
return ;
else
printf("%s",str);
}
第三:函数返回是否成功判断
FILE *pFile;
pFile=fopen("mtfile.txt", "r");
if(pFile==NULL)
printf("open error");
2 void指针
void用在函数定义中,表示函数没有返回值或者没有形参,而void用在void *中表示指针指向的数据类型是未知的。也就是说,void *表示的是一个有效指针,它确实指向实实在在的数据,只是数据的类型尚未确定,在后面的使用过程中要进行强制类型转换。
int main(){
char *str = (char *)malloc(sizeof(char) * ); //malloc返回值是void *类型,在使用时要进行强制类型转换
gets(str);
printf("%s\n", str);
return ;
}
指针专题6-空指针NULL和void指针的更多相关文章
- 关于空指针NULL、野指针、通用指针 (转)
reference:https://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白 ...
- 关于空指针NULL、野指针、通用指针
http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了.假设 ...
- 指针版的PStash(用一个void指针数组, 来保存存入元素的地址) 附模板化实现 p321
由容器PStash的使用者,负责清除容器中的所有指针.所以用户必须记住放到容器中的是什么类型,在取出时,把取出的void指针转换成对应的类型指针,然后 'delete 转换后的对象指针',才能在清除时 ...
- void和void*指针的一些理解
void 和 void* 指针分别表示无类型和无类型指针. void 的作用是限制: 1,函数无返回值. 2,函数无参数. 当函数的返还值无参数的时候一定要加上 void ,因为在缺省的状态下函数的返 ...
- C++ Primer 学习笔记与思考_7 void和void*指针的使用方法
(一)void的含义 void的字面意思是"无类型",void差点儿仅仅有"凝视"和限制程序的作用,由于从来没有人会定义一个void变量,让我们试着来定义: v ...
- void类型及void指针(转载)
转载 https://www.cnblogs.com/pengyingh/articles/2407267.html 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针” ...
- void指针意义、Const、volatile、#define、typedef、接续符
1.C语言规定只有相同类型的指针才可以相互赋值. Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换. 2.在C语言中Const修饰的变量是只读的,本 ...
- void指针和NULL指针
Void指针和NULL指针 Void指针: Void指针我们称之为通用指针,就是可以指向任意类型的数据.也就是说,任何类型的指针都可以赋值给Void指针. 举例: #include<stdio. ...
- 黑马程序员-nil Nil NULL NSNull 野指针和空指针
空指针1.空指针指不含有任何内存地址的指针.在没有具体初始化之前,其被符值为0Dog * dog = nil;Dog * dog = NULL;都为空指针2.野指针指指向的内存为垃圾内存,导致其值不确 ...
随机推荐
- Python进阶-XI 常用模块之一:collections、time、random、os、sys
简要介绍一下各种集合: 列表.元组.字典.集合(含frozenset).字符串.堆栈(如手枪弹夹:先进后出).队列(如马克沁机枪的弹夹:先进先出) 1.collections 1)queue 队列介绍 ...
- linux-部署1
0.python安装 ubuntu16.04默认:安装了python2.7和python3.5: Ubuntu18.04默认:只有python3.6.8 下面是针对16.04: python/pyth ...
- 初识程序设计,Linux使用问题记录
刚开始实在csdn写的,排版csdn更好看,本文链接:https://blog.csdn.net/qq_30282649/article/details/102910972 @[TOC](刚开始学习计 ...
- JDK8过渡到JDK11
module-info 首先最大的难度就是module-info.java Java9 手把手教你实现模块化 后续我再找点详细的资料 中文API文档 其次是中文文档[感谢 译者wzjin https: ...
- @PostConstruct、@Autowired以及构造函数的执行顺序
结论先行:构造函数 -> PostConstruct -> @Autowired 依次执行 由于项目需要启动时加载一个配置信息,所以想到了用@PostConstruct,如下所示: @Co ...
- java ssh免密登录
package com.meituan.stabletest.sshtest; import java.io.InputStream; import com.jcraft.jsch.Channel; ...
- Java中json使用与问题汇总
一.JSON 解析类库 FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀. 在maven项目的pom文件中以下依赖 <dependency> <groupId>c ...
- linux下发布项目
查看端口
- gogs私有代码库上传项目
https://blog.csdn.net/zhouxueli32/article/details/80538017 一.上传 在cmd命令里进入该项目 然后依次输入以下命令 git initgit ...
- 【JVM学习】3.深入解析强引用、软引用、弱引用、幻象引用
来源:公众号:猿人谷 关于强引用.软引用.弱引用.幻象引用的区别,在很多公司的面试题中经常出现,可能有些小伙伴觉得这个知识点比较冷门,但其实大家在开发中经常用到,如new一个对象的时候就是强引用的应用 ...