欢迎光临散文网 会员登陆 & 注册

计算机程序基础教程(10):C语言 - 指针

2023-03-09 00:33 作者:阿狸喜羊羊  | 我要投稿


【指针基础】


C语言使用数据名调用数据,数据名无法实现汇编中的间接内存寻址,为此C语言提供了指针功能,指针本身是一个数值数据,用于存储另一个数据的地址,从而实现数据的间接寻址,使用指针调用不同地址、不同数据时,调用数据的代码无需修改,只需要修改指针的值即可。


指针也称为指针变量,在32位程序中,指针变量是一个无符号4字节整数,在64位程序中,指针变量是一个无符号8字节整数。


指针有类型之分,其存储哪种类型数据的地址就属于哪种类型的指针,编译器通过指针类型确定要操作多少内存地址,比如int类型指针操作4个内存地址。

定义指针变量时首先指定指针类型,之后编写*符号表示这是一个指针变量,赋值时使用&符号提取一个数据的地址。

使用指针变量时,在指针变量名前添加*符号,表示调用指针指向的数据,而非指针变量本身。



 ● 多重指针


指针变量本身还可以被另一个指针存储,相当于多层间接寻址。


int ** a;    //指针的指针

int *** b;   //三重指针



 ● 指针作为数组元素



二维数组作为参数时,编译器自动转换为指针,同一维数组。



也可以使用双重指针代替二维数组当做参数。



 ● 指针作为参数



 ● 指针作为返回值





【数组指针】


数组指针为数组第一个元素的指针,第一个元素的地址就是数组的地址。





【结构体指针】


使用指针调用结构体成员有两种方式:

1.指针名->成员名。

2.(*指针名).成员名。





【共用体指针】





【函数指针】


函数指针存储一个函数的地址,定义函数指针比较复杂,首先指定返回值类型,之后编写一个()符号,内部设置指针名,以*号开头,之后编写第二个()符号,内部设置参数类型,为函数指针赋值直接编写函数名即可。




函数指针作为参数





【指针运算】


指针变量可以进行数学运算,不同类型的指针运算结果不同。

  • 变量指针+1,指针本身增加变量的长度,比如int指针+1等于指针值+4,定位到下一个int数据,short指针+1等于指针值+2。

  • 数组指针+1,指针本身增加数组元素的长度,定位到数组下一个元素。

  • 结构体指针+1,指针本身增加结构体的长度,注意结构体长度并非所有成员长度的总和,需要额外计算地址对齐占用的存储空间。

  • 函数指针,不支持数学运算。




两个类型相同的指针之间可以进行减法运算,表示计算两个指针记录的地址之间存储了多少个数据。





【指针类型转换】


指针类型可以转换,编译器将按照转换后的类型操作内存地址。



指针类型可以定义为void,表示空类型,空类型指针可以存储任何数据的地址,也可以转换为任何类型的指针。

当你需要接收一个指针,但又不确定它的类型时,可以定义一个空类型指针接收它,之后转换为具体的类型再使用。




计算机程序基础教程(10):C语言 - 指针的评论 (共 条)

分享到微博请遵守国家法律