一. 定义指针
指针定义的三要素:
1. 数据类型
2. 变量名
3. 初始值
Eg: int *a = NULL, char *b = NULL, float *c = NULL;
注:NULL表示为空,恒为0
指针变量的大小仅跟操作系统的位数有关,32位操作系统占4个字节,64位操作系统占8个字节与long型变量类似.
int char float表示指针所指向的存储空间对应的数据类型,与指针本身无关
二. 指针的运算符
1. &为取地址的单目运算符
2. *与指针连用则为取该指针指向空间的内容
Eg: int number = 5; int *p = &number; *p -> number; (->表示等价)
3. %p为指针打印输出的格式控制符,将其打印显示为地址编号十六进制表现形式
4. &与*为互逆运算
三. 指针获取空间内容
int a = 6; short *p = &a;
如上操作可以通过编译,但指针p通过*取内容时,一次能取多少个字节的空间,取决于指针定义时的函数类型
如果指针的类型与其指向的空间类型不匹配,地址依然可以被保存,但是指针在取内容运算和算数运算时可能得不到正确结果.
四. 指针与数组
1. int array[10] = {0};
&array与array的地址相同,但其类型部同,&array的类型自增运算则加为整个数组长度,而array自增是一个元素的长度,并且二者均不能被修改.
&array 的实际数据类型是
int (*array)[10] 为数组指针 为指向10个元素的指针
int *array[10] 为指针数组 为有10个元素的数组,每个元素都是指向整型的指针
2. sizeof()是取字节运算符,可以获取数据类型和变量的字节数
3. const关键字修饰一个变量为只读变量(不允许修改)const出现在指针类型的左侧表示指针指向的空间通过*运算符运算时不能修改,出现在指针类型的右侧表示指针变量不能重指向.同时出现,表示指针变量既不能重指向,其指向的空间也不能被修改