指针
目录
- 概述——对指针的理解
- 指针的类型
数值指针
结构体指针
空指针
指向指针的指针
函数指针
- 指针和数组
- 对NULL、nil、Nil的理解
- 指针的存储长度
- 指针的运用
概述——对指针的理解
指针就是数据存储的地址,数据可以为基本数据类型数值、结构体数值和函数;C++或OC中还可以是类;空指针是一种特殊的指针
根据数据类型定义指针变量
数值指针(包括字符)
int a = 100;
int *p = &a;
或int *p = (int *)malloc(sizeof(int));
注意
如果直接int *p;*p = 3;这会在运行时报错,原因在于没有申请p所指向的存储位置,int *p;仅仅是申请了指针p的地址;
char *c = "abc";(与char c[ ] = "abc"类似)
结构体指针
空指针
用空指针终止对递归数据结构的间接引用
例如:在链表中当遍历到末尾时,则会通过空指针来判断,while(p!=NULL){ p = p->next; }
用空指针作函数调用失败时的返回值;
用空指针作警戒值,来标识事物结尾的一个特定值;
例如:main()函数的预定义参数argv是一个指针数组,它的最后一个元素(argv[argc])永远是一个空指针,因此可以使用下述方法快速引用argv中的每一个元素:
for(int i=1;argv[i]!=NULL;++i){
printf("argv[%d] = "%s",i,argv[f]);
}
指向指针的指针
函数指针
函数返回类型 (*函数指针名)(参数列表);
例如:
void sum(int,int);
void (*p)(int,int) = sum;
或者分开写
void (*p)(int,int);
p = sum;
注意:函数指针中参数列表的个数一定要与函数指针所指向的函数的参数列表的个数相等,而且类型要对应相符;
指针和数组
数组指针和指针数组
数组指针:首先需要定义好一个长度固定的数组,然后用这个数组去赋值给数组指针,并且使用该长度去遍历数组,遍历的范围不能超过该长度
指针数组:由指针组成的数组,例如:int *array[5];
对NULL、nil、Nil的理解
对这三个关键词的理解和什么是野指针
指针的存储长度
指针存储的长度跟操作系统的位数有关,如果是32位操作系统,则其指针存储的字节长度为4(4*8);如果是64位操作系统,则其指针存储的字节长度为8(8*8);
注:8代表计算机中一个字节有8位
指针的运用
交换数值,改变实参的数值,数据结构中链式存储结构的实现