目录

  • 一.指针简介
  • 二.空指针 NULL
  • 三.void 指针
  • 四.重点总结
  • 五.猜你喜欢

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

一.指针简介

在前面的文章有关于指针的介绍:指针很灵活,它可以指向任意类型的数据。指针的类型说明了它所指向地址空间的内存,以下是有效的指针声明:

int    *p;    /* 一个整型的指针 */
double *p;    /* 一个 double 型的指针 */
float  *p;    /* 一个浮点型的指针 */
char   *p;    /* 一个字符型的指针 */

注意:不要忘记在指针类型和变量名中间还有一个 * 号,没有这个 * 号,只是定义了一个普通变量,这也是普通变量声明和指针声明的区别之一;

二.空指针 NULL

在 C 语言中,如果一个指针不指向任何数据,我们就称之为 空指针 ,用 NULL 表示。例如:

int *p = NULL;

注意区分大小写,null 没有任何特殊含义,只是一个普通的标识符。NULL 是一个宏定义,在 stdio.h 被定义为:

#define NULL ((void *)0)

我们知道,变量一旦定义就要分配内存,指针变量也是如此。当你还不清楚要把指针初始化为什么地址时,请将它初始化为 NULL;例如:

int *p;  //它不是空指针

它的值是随机的,是垃圾值,如果不小心使用了它,运行时一般会引起段错误,导致程序退出,甚至会不知不觉地修改数据。当你还不清楚要把指针初始化为什么地址时,请将它初始化为 NULL;

三.void 指针

C 语言还有一种 void 指针类型,即可以定义一个指针变量,但不说明它指向哪一种类型数据。例如:

void *p = malloc(20);

上面代码表示在内存中分配 20 个字节的空间,但不确定它保存什么类型的数据,有可能是 char,也有可能是 int 或者 float double……

void 指针通常称为通用指针,就是可以指向任意类型的数据。也就是说,任何类型的指针都可以赋值给 void 指针,例如:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C语言 void 指针
//@Time:2021/06/22 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/#include<stdio.h>int main()
{int num = 1024;int *pi = &num;char *ps = "猿说编程 - codersrc.com";void *pv;pv=pi;printf("pi:%p\npv:%p\n",pi,pv);printf("*pv:%d\n",*(int *)pv);pv=ps;printf("pv:%p\nps:%p\n",pv,ps);printf("*pv:%s\n",(char *)pv);return 0;
}/*输出结果:
pi:0060FEF0
pv:0060FEF0
*pv:1024
pv:00403064
ps:00403064
*pv:猿说编程 - codersrc.com
*/

四.重点总结

  • NULL 用于指针和对象,指向一个不被使用的地址;而’\0’表示字符串的结尾;
  • NULL 指针: #define NULL ((void *)0)
  • 当你还不清楚要把指针初始化为什么地址时,请将它初始化为 NULL ;在对指针进行解引用时,先检查该指针是否为 NULL

五.猜你喜欢

  1. C 语言逻辑运算符
  2. C 语言三目运算符
  3. C 语言逗号表达式
  4. C 语言 sizeof 和 strlen 函数区别
  5. C 语言 strcpy 和 strcpy_s 函数区别
  6. C 语言 memcpy 和 memcpy_s 区别
  7. C 语言 数组定义和使用
  8. C 语言 数组遍历
  9. C 语言 数组下标越界
  10. C 语言 数组内存溢出
  11. C 语言 数组下标越界和内存溢出区别
  12. C 语言 二维数组定义和使用
  13. C 语言 二维数组行数和列数计算
  14. C 语言 指针声明和定义
  15. C 语言 指针 p++ / p–
  16. C 语言 p++/§++/_(p++)/_p++
  17. C 语言 使用指针遍历数组
  18. C 语言 指针和数组区别
  19. C 语言 数组指针
  20. C 语言 指针数组
  21. C 语言 指针数组和数组指针区别
  22. C 语言 空指针 NULL
  23. C 语言 void 指针

未经允许不得转载:猿说编程 » C 语言 void 指针

C语言 void 指针 - C语言零基础入门教程相关推荐

  1. C语言 const 修饰指针 - C语言零基础入门教程

    目录 一.const 简介 二.const 修饰指针 1.const int *p 2.int const *p 3.int * const p 4.const int * const p 三.猜你喜 ...

  2. C语言 函数指针和指针函数区别 - C语言零基础入门教程

    目录 一.函数指针和指针函数声明的区别 1.函数指针 2.指针函数 二.函数指针和指针函数调用的区别 1.函数指针的调用 2.指针函数的调用 三.猜你喜欢 零基础 Python 学习路线推荐 : C/ ...

  3. C语言 函数指针 - C语言零基础入门教程

    目录 一.函数指针简介 1.常规函数声明 2.函数指针声明 二.函数指针实战 三.猜你喜欢 零基础 Python 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.函数指 ...

  4. C语言 野指针 - C语言零基础入门教程

    目录 一.简介 二.野指针产生的原因 1.指针变量未初始化 2.指针释放后之后未置空 三.避免野指针产生 1.初始化时置 NULL 2.释放时置 NULL 四.猜你喜欢 零基础 C/C++ 学习路线推 ...

  5. C语言 ##__VA_ARGS__ - C语言零基础入门教程

    目录 一.##__VA_ARGS__原理 二.##__VA_ARGS__使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.##__ ...

  6. C语言 __VA_ARGS__ - C语言零基础入门教程

    目录 一.__VA_ARGS__简介 二.__VA_ARGS__使用 1.__VA_ARGS__宏输出字符串常量 2.__VA_ARGS__宏输出可变参数 三.__VA_ARGS__缺点 1.仅仅只支 ...

  7. C语言 ##运算符 - C语言零基础入门教程

    目录 一.##运算符简介 二.##运算符使用 1.##运算符常规使用 2.##运算符定义结构体 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础 ...

  8. C语言 __cplusplus - C语言零基础入门教程

    目录 一.__cplusplus 简介 二.__cplusplus 使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.__cplu ...

  9. C语言 #运算符 - C语言零基础入门教程

    目录 一.#运算符简介 二.#运算符使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.#运算符简介 在 C 语言关于 define ...

  10. C语言 extern “C” - C语言零基础入门教程

    目录 一.__cplusplus 简介 二.__cplusplus 使用 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.__cplu ...

最新文章

  1. Android下对Cookie的读写操作(附Demo)
  2. 选带傅里叶变换(zoom-fft)
  3. 异数OS 2017 DPDK 峰会观后感
  4. 如何使用Apache Drill分析高度动态的数据集
  5. 1970“变种”bug连WiFi热点iOS设备会变砖?
  6. 6.6纪念永远的badboy
  7. 被李小龙女儿起诉侵权后,真功夫态度强硬:不寻求和解,无更换商标计划
  8. linux文件移出目录命令_linux命令大全_文件目录操作命令
  9. requests有意思的proxies参数-何时使用代理有效
  10. nginx二进制编译-启动脚本编写
  11. 移动Web开发 ----- Flex布局详解
  12. 开发人员速查表-收集
  13. 【C语言】爱心表白代码
  14. openwrt关闭网卡端口
  15. 重大噩耗:苹果账号无法付款!(11-20更新:账单地址和卡地址一样,信用卡名字和开发者名字一致,都无法付款)
  16. Eclipse中如何调出Servers,这里教你一遍成功。
  17. Windows 10打开蓝牙已关闭解决方法
  18. 汉字转拼音,用户表增加拼音字段,并将汉字姓名对应的拼音赋值给拼音字段
  19. fuse的安装与使用
  20. win7无线热点_电脑小技巧电脑做无线热点

热门文章

  1. 启动、内存、卡顿三大分析,用户体验就用它?
  2. Snowflake如日中天是否代表Hadoop已死?大数据体系到底是什么?
  3. Serverless 服务选型
  4. 2019阿里巴巴技术面试题集锦(含答案)
  5. 一枚戒指,一场仪式,这件事阿里巴巴坚持了15年
  6. 阿里云文件存储的高性能架构演进之路
  7. 冲击中国超融合第一,浪潮的底气从何而来?
  8. WAIC|高精准、低成本,九章云极DataCanvas突破AutoML难题
  9. Spark精华问答:DataFrame与RDD的主要区别在哪?
  10. Kubernetes API 与 Operator:不为人知的开发者战争