指针基本概念
指针和指针变量
指针就是内存的地址编号
指针变量,本质是变量,只是该变量保存的是内存的地址编号(不是普通的数值)

指针变量的定义
用 * 来修饰指针变量。例如:
1、定义一个指针变量p 保存 int num的地址 int *p;
2、定义一个指针变量p 保存数组int arr[5]首地址 int (*p)[5];
3、定义一个指针变量p 保存函数的入口地址 int fun(int,int) int (*p)(int,int);
4、定义一个指针变量p 保存结构体变量的地址 struct stu lucy struct stu *p;
5、定义一个指针变量p 保存指针变量int *p的地址 int **p
在32位平台,任何类型的指针变量都是4字节
在64位平台,任何类型的指针变量都是8字节
指针变量和普通变量建立关系,如下图所示



指针变量的初始化
1、指针变量如果不初始化,立即操作会出现段错误

2、指针变量如果没有指向合法的空间,建议初始化为NULL(不要操作指向NULL的指针变量)

3、将指针变量初始化为合法地址(变量的地址、动态申请的地址、函数入口地址)。例如:
int data = 10, *p = &data;
注意:
指针变量在操作之前,必须指向合法的地址空间
int *p = NULL; //NULL是赋值给p 完整的表达式:int *p; p = NULL;
指针变量的类型
将指针变量名遮盖,剩下的类型就是指针变量自身的类型。例如:
int *p; p自身的类型就是 int *
指针变量自身的类型,一般用于赋值语句判断
将指针变量名和离它最近的一个 * 一起遮盖,剩下的类型就是指针变量指向的类型。例如:
int *p; p指向的类型为Int
指针变量的注意事项
1、void 不能定义普通变量
例如:void num; //error void不能给num开辟空间
2、void * 可以定义指针变量
例如 void *p; 因为p是void * 类型(p是万能的一级指针变量,能保存任意以及指针地址编号)
万能指针一般用于函数的形参,以达到算法操作多种数据类型的目的(不能对万能指针变量取 * ,因为p的指向类型为void,无法确定p的取值宽度)
3、指针变量未初始化,不要取*
例如:int *p; *p; //提示段错误
4、指针变量初始化为NULL,不要取*
例如:int *p = NULL; *p; //提示段错误
5、指针变量不要越界访问


浙公网安备 33010602011771号