目录
- [一.指针简介]
- [二.空指针 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 指针,例如:
/******************************************************************************************/
#include<stdio.h>
int main()
{
int num = 1024;
int *pi = #
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