Void指针和NULL指针

Void指针:

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

举例:

#include<stdio.h>
int main ()
{
int num = 666;//这里定义为整型
int *pi = &num;
char *ps = "I love XYT";//这里为字符型
void *pv; pv = pi;//将整型赋值void指针
printf("pi:%p, pv:%p\n", pi, pv); pv = ps; //将字符型赋值给void指针
printf("ps:%p, pv:%p\n", ps, pv);
//最后的结果是两个地址一样,可以正常赋值过去 return 0;
}

无类型指针没办法进行解引用,所以可以强制转换

例子:

#include<stdio.h>
int main ()
{
int num = 520;//这里定义为整型
int *pi = &num;
char *ps = "I love XYT";//这里为字符型
void *pv; pv = pi;
printf("pi:%p, pv:%p\n", pi, pv);
printf("pv:%d\n", *(int *)pv);//这里为强制转换 pv = ps;
printf("ps:%p, pv:%p\n", ps, pv);
rintf("pv:%d\n", (char *)pv);//这里为强制转换,没有*是因为打印字符串不需要 return 0;
}

需要注意:使用void指针,不到必要的时候,不要乱用

NULL指针

如果一个指针不指向任何数据我们称之为空指针,也叫NULL指针。

为什么要用到NULL指针呢,当你还不清楚要将指针初始化为什么地址时,请将它初始化为NULL;在对指针进行解引用时,先检查该指针是否为NULL指针(用if),

#include<stdio.h>
int main ()
{
int *p1;
int *p2 = NULL; printf("%d\n" *p1);
printf("%d\n" *p2); return 0;
}

p1这种指针没有什么具体数据的,会乱指一气,我们称为野指针或者迷途指针

若对其解引用,如果地址是合法的,就会得到随机的值

使用NULL指针的话,就会很好解决这个问题

对NULL指针进行解引用的时候,就会出现非法警告

void指针和NULL指针的更多相关文章

  1. void指针、NULL指针和未初始化指针

    一个指针可以被声明为void类型,比如void *x.一个指针可以被赋值为NULL.一个指针变量声明之后但没有被赋值,叫做未初始化指针. 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  2. 野指针、NULL指针和void*

    一.野指针 “野指针”不是NULL指针,是指向“垃圾”内存的指针. “野指针”的成因主要有三种: (1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱 ...

  3. NULL指针 Void* 和野指针

    在C和C++的语言中常常有这几个概念: NULL指针.空指针.Void *指针.野指针(Wild Pointer)甚至垂悬指针(Dangling Pointer). 1.NULL指针,一般用于指向一个 ...

  4. 指针专题6-空指针NULL和void指针

    1 NULL指针 一个指针变量可以指向计算机中任何一块内存,不管该内存有没有被分配,也不管该内存有没有使用权限,只要把地址给他,他就可以指向.C语言没有一种机制保证指向内存的正确性,程序员必须自己提高 ...

  5. NULL指针、零指针、野指针

    1.1.空指针 如果 p 是一个指针变量,则 p = 0; p = 0L; p = '\0'; p = 3 - 3; p = 0 * 17;p=(void*)0; 中的任何一种赋值操作之后, p 都成 ...

  6. 【C++基础】sizeof 数组 指针 空NULL

    笔试遇到很多sizeof的小题,博主基础堪忧,怒总结如下,还是要巩固基础啊啊啊! sizeof操作符 对象所占 栈内存空间的大小,单位是字节 关键词:char  数组 指针 结构体 class [注意 ...

  7. 提领NULL指针

    通常之中导致程序崩溃的最重要的原因是试图取消引用NULL指针.正如在以前的文章中指出,智能指针RefCountPtr和ScopedPtr它提供了一个诊断的执行时间. 但,并不是所有的指针是所有的对象都 ...

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

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

  9. 为什么NULL指针也能访问成员函数?(但不能访问成员变量)

    查看更加详细的解析请参考这篇文章:http://blog.51cto.com/9291927/2148695 看一个静态绑定的例子: 1 #include <iostream> 2 3 u ...

随机推荐

  1. 按照事务类型分析 DB2 事物的性能

    概述 事务是数据库系统中的核心概念之一.作为数据库系统的逻辑工作单元(Unit of Work),事务必须具有四个属性,即原子性.一致性.隔离性和持久性(ACID).数据库系统往往通过锁机制保证事务的 ...

  2. Mybatis 中 sql 语句的占位符 #{} 和 ${}

    #{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换.#{} 可以有效防止   sql注入. #{}  ...

  3. DataTable Excel 导出:

    public static class CSVFileHelper { public static string ToHtmlTable(this DataTable target) { return ...

  4. 洛谷P3601签到题(欧拉函数)

    题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...

  5. [poi2011]bzoj 2277 —— strongbox·[洛谷3518]

    ·问题描述· 有一个密码箱,0到n-1中的某些数是它的密码.且满足:如果a和b都是它的密码,那么(a+b)%n也是它的密码.某人试了k次密码,前k-1次都失败了,最后一次成功. 问:该密码箱最多有多少 ...

  6. Xor Sum HDU - 4825(01字典序板题)

    #include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...

  7. 使用oVal进行Java Bean 验证的注意事项

    如果需要不同条件验证不同的属性的时候,需要使用profiles属性,每个校验注解符中都有.注意:oVal默认是启用所有的profiles,所以在对单独一个profile进行启用的时候,需要先disab ...

  8. ZJOI 2017 二试 day1 4.26

    day0,11:30熄灯,又因为在房间里太浪,空调开了28度,过了好久才成功降温,导致睡得不太好QaQ. 于是早上昏昏欲睡,也没怎么听懂(orz孙耀峰). 中午大家一致提议下午不去听课,回到房间浪了好 ...

  9. Sort Integers

    ) algorithm. 分析 bubble sort 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class Solution ...

  10. BZOJ1069 [SCOI2007]最大土地面积 【凸包 + 旋转卡壳】

    题目链接 BZOJ1069 题解 首先四个点一定在凸包上 我们枚举对角线,剩下两个点分别是两侧最远的点 可以三分,复杂度\(O(n^2logn)\) 可以借鉴旋转卡壳的思想,那两个点随着对角线的一定单 ...