指针小结

来源:互联网 发布:华山栈道怎么修的知乎 编辑:程序博客网 时间:2024/05/01 08:23

指针可简单分成2类:

数据指针:指向数据区,取内容运算是访问该指针所指的数据,

函数指针:指向程序代码区,取内容运算则是程序控制转移到函数指针所指的函数目标代码模块首地址,执行该函数的函数体目标代码。C语言中,函数指针的作用主要体现在函数间传递函数时。在实际应用中,当需要把几个不同的函数传递给同一个执行过程时,或者说在一个执行过程中可以调用不用的函数时,函数的传递能体现出较大的优越性,函数指针能发挥作用。


函数指针、数组指针、指针数组

函数指针和数组指针的定义具有异曲同工之处:

Int (*a)(…); // 函数指针的定义
Int (*a)[…]; // 数组指针的定义

Int *a[.....]; // 指针数组的定义


数组指针

Int a[10];

数组名的取地址运算&a的类型是数组指针类型,其+1的偏移量是该数组的长度,因此&a+1指向的是下一个数组的地址,即+1偏移量是10个int。

&a的值(地址值)和该数组的第一个元素的地址值相等,但类型不同可强制转换。


数组指针具有如下特点:

1)不能把一维数组的数组名直接赋给一维数组指针。

例如: inta[10],(*pa)[10];

pa = a; //出错!

正确的做法是,强制类型转换:

pa = (int ( * )[10])a;

pa = &a;


2)访问数组a的第i号元素为:*(*pa + i)


字符串指针与字符数组

下面2个定义有很大的差别:

char amessage[] = “now is the time”; // 赋值初始化方式,初始化的是一个数组

char *pmessage = “now is the time”; // 定义一个指针,指向常量区的字符串首地


0 0
原创粉丝点击