操作系统(32位系统)给每个存储单元分配了一个编号,从0x00 00 00 00 ~off ff ff ff,这个编号咱们称之为地址 所以 指针就是地址 操作系统存储数据或者分配内存均是以字节为单位的,所以一个地址代表的是一个字节,它有8位bit位。
无论什么类型的地址,都是存储单元的编号,在32位平台下都是4个字节, 即任何类型的指针变量都是4个字节大小
定义一个变量,这个变量的类型是指针类型,即在变量保存的是地址,则称为指针变量 简单来说:是个变量,是个指针变量,即这个变量用来存放-一个地址编号
对应类型的指针变量,只能存放对应类型的变量的地址 举例:整型的指针变量,只能存放整型变量的地址 指针类型有: ①基本类型指针:如字符指针、整型指针、浮点数指针等 ②构造类型指针:如数组指针、函数指针、指针的指针、结构体指针等
这里要与指针自身的类型区分开,指针自身的类型是指指针变量可以什么类型的数据 而指针指向的类型指指针指向的地址中保存的内容是什么类型的数据。
看到代码,从左至右,找运算符优先级最高的开始以优先级顺序结合。
例如有如下定义: int (*a[10])(int) ; 第一步:找优先级最高的 a[10] 数组 第二步:用一个符号表示上一步的表达式 p1 = a[10] 第三步:重复一二步 *p1 指针 p2 = *p1 int p2(int) 函数 第四步:所有写完之后重下向上读出基本类型,就是上述表达式的类型 函数 指针 数组 练习: char* (*pType[5])(char *, const char *); pType[5] 数组 p1 = pType[5] *p1 指针 p2 = *p1 char *p2(char *,const char *) 函数 结果:函数指针数组根据题设描述,分析实质,从实质的上层依次往下写,遇到优先级冲突问题就加()。
题设:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数,并返回一个整形数 第一步:分析实质 它是数组,有10个元素 a[10] 第二步:分析下一层实质,重复此步,直到写完 数组的元素指针 *(a[10]) 指针的类型是函数指针 写出函数原型 int fun(int) 用上面的内容替换函数名: int (*(a[10]))(int) 第三步:省略不需要的括号 int (*a[10])(int)