指针仅仅是一种数据类型,该数据类型专门用来存放地址;
数据类型又分为:
基础数据类型: char short int long float double
构造类数据类型:数组,指针,结构体,共用体,枚举
指针的定义:指针指向的空间的数据类型 *变量名;
格式:数据类型 *变量名;
数据类型:指针指向的空间的数据类型;指针里面存放谁的地址,就称为指针指向谁
举例:
int num;
int *p = #
//p里面存放num的地址,叫做p指向num;
int *p;
p的数据类型:int *
//int:p指向的空间的数据类型;
指针的大小:固定是8字节(64位计算机)
int *p;//sizeof(p) == 8;
char *p;//sizeof(p) == 8;
指针的用法:
- 一般用法:
int num = 100;
int *p = #
- int *p = NULL;//NULL是0地址;
解指针:
格式:*变量名;(通过地址,操作指针指向的空间;)
int num = 200;
int *p = #
printf(“%d”,*p);//200(p里面存放num的地址,叫做p指向 num,则*p就是得到num的空间)
野指针(空指针):(避免出现空指针)
int *p; //局部变量 -- p 里面存的是随机数
*p = 200;//不报错! ! 但是不能做! !
int *p; //局部变量 -- p 里面存的是随机数
*p = 200;//不报错! ! 但是不能做! !
指针偏移:(指针加减)指针的加减以指针指向的空间大小为单位
int *p = NULL;
p++; //p = 0x4
char *p = NULL
p++; //p=0x1
int *p = NULL;
p++; //p = 0x4
或char *p = NULL
p++; //p=0x1
二级指针
定义:指针指向的空间类型 *变量名;
int num = 100;
int *p = # //一级指针 p
int **q = &p; // q 二级指针
指针偏移:以指针指向的空间大小为单位偏移(二级指针指向的空间均为指针,因此二级指针的指针偏移统统以8字节为单位)
例:
int **p = NULL;
p++;//0x8
char **a = NULL;
a++;//0x8