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指针的更多相关文章

  1. 关于空指针NULL、野指针、通用指针 (转)

    reference:https://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白 ...

  2. 关于空指针NULL、野指针、通用指针

    http://www.cnblogs.com/losesea/archive/2012/11/16/2772590.html 首先说一下什么是指针,只要明白了指针的含义,你就明白null的含义了.假设 ...

  3. 指针版的PStash(用一个void指针数组, 来保存存入元素的地址) 附模板化实现 p321

    由容器PStash的使用者,负责清除容器中的所有指针.所以用户必须记住放到容器中的是什么类型,在取出时,把取出的void指针转换成对应的类型指针,然后 'delete 转换后的对象指针',才能在清除时 ...

  4. void和void*指针的一些理解

    void 和 void* 指针分别表示无类型和无类型指针. void 的作用是限制: 1,函数无返回值. 2,函数无参数. 当函数的返还值无参数的时候一定要加上 void ,因为在缺省的状态下函数的返 ...

  5. C++ Primer 学习笔记与思考_7 void和void*指针的使用方法

    (一)void的含义 void的字面意思是"无类型",void差点儿仅仅有"凝视"和限制程序的作用,由于从来没有人会定义一个void变量,让我们试着来定义: v ...

  6. void类型及void指针(转载)

    转载 https://www.cnblogs.com/pengyingh/articles/2407267.html 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针” ...

  7. void指针意义、Const、volatile、#define、typedef、接续符

    1.C语言规定只有相同类型的指针才可以相互赋值. Void*指针作为左值用于接收任意类型的指针, void*指针作为右值赋给其他指针时需要强制类型转换. 2.在C语言中Const修饰的变量是只读的,本 ...

  8. void指针和NULL指针

    Void指针和NULL指针 Void指针: Void指针我们称之为通用指针,就是可以指向任意类型的数据.也就是说,任何类型的指针都可以赋值给Void指针. 举例: #include<stdio. ...

  9. 黑马程序员-nil Nil NULL NSNull 野指针和空指针

    空指针1.空指针指不含有任何内存地址的指针.在没有具体初始化之前,其被符值为0Dog * dog = nil;Dog * dog = NULL;都为空指针2.野指针指指向的内存为垃圾内存,导致其值不确 ...

随机推荐

  1. Nginx与安全有关的几个配置

    Nginx与安全有关的几个配置 原创: 37丫37 运维咖啡吧 昨天 安全无小事,安全防范从nginx配置做起 上一篇文章<Nginx的几个常用配置和技巧>收到了不错的反馈,这里再总结下n ...

  2. oracle--oracle18C环境配置(一)

    一,硬件配置检查 使用以下命令确定服务器上的物理RAM大小: # grep MemTotal /proc/meminfo 如果系统中安装的物理RAM的大小小于所需的大小,则必须先安装更多内存,然后再继 ...

  3. oracle--ORA-27125

    一,问题描述 ORA-27125 unable to create shared memory segment 二,问题解决 查看系统的oracleid号 [root@dgwxpdb ~]# id o ...

  4. quartz Cron表达式生成详解

    简介 Cron作为一个Unix工具,已经存在很长一段时间了,用于实现任务调度的功能.CronTrigger类基于Cron而来. CronTrigger CronTriggers往往比SimpleTri ...

  5. (十四)golang--函数和包

    1.怎么定义函数? func (形参列表) 返回值列表{ 执行操作 return } 2.什么是包? 包的本质就是一个文件夹,存放程序文件 三大作用: 区分相同的名字的函数.变量等标识符: 当程序文件 ...

  6. (三)golang--执行流程分析

    XXX.go--go build XXX.go--XXX.exe XXX.go--go run XXX.go 两种方式的区别:(1)如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没g ...

  7. linux php composer安装和使用教程

    linux php composer安装和使用教程建议在linux下 下载后 然后再下载到本地               win上最好别用composer下载速度超级慢 或者根本下不动 项目依赖包 ...

  8. CW2 Software Maintenance Spec Sheet

    CW2 Software Maintenance Spec SheetAcademic Year 2019/2020CW2 is about maintaining and extending a r ...

  9. 基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒)

    本篇文章给大家带来的内容是关于基于Laravel框架下使用守护进程supervisor实现定时任务(毫秒),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 公司需要实现X分钟内每隔Y秒 ...

  10. Deep Learning专栏--FFM+Recurrent Entity Network的端到端方案

    很久没有写总结了,这篇博客仅作为最近的一些尝试内容,记录一些心得.FFM的优势是可以处理高维稀疏样本的特征组合,已经在无数的CTR预估比赛和工业界中广泛应用,此外,其也可以与Deep Networks ...