首页 > 代码库 > C语言指针大杂烩

C语言指针大杂烩

By francis_hao Oct 31,2016

指针数组和数组指针

指针数组本身是个数组,数组的内容是指针。形如char *pa[]。由于[]优先级高于*,pa先于[]结合表示pa是一个数组,pa[]再与*结合表示pa[]是指针。比如pa[0]放了一个指针。

数组指针本身是个指针,指针指向的是数组。形如char (*ap)[6]。ap与*结合表示ap是个指针,(*ap)再和[6]结合表示(*ap)是个数组名,含有6个元素,可以把(*ap)[6]想成a[6],那么可以把(*ap)看成数组首地址a,而ap就是指向一个含有6个元素的数组的指针。

指针常量和常量指针

首先共同点是他俩都是指针,只不过侧重点不同,放在前面的就是侧重的。

指针常量侧重于指针,说明指针本身是一个常量性质的,也就是说指针的值是不能改变的,指针常量的形式如:int *const a; 英语读作a const point to int。const放在谁后面就是修饰谁,说明*是const的,不能被修改,如下所示

#include <stdio.h>

int main(void)

{

int *const cp;

int aa;

cp = &aa; /* 错误的,不能在除初始化处对cp进行赋值 */

return 0;

}

技术分享

只能在定义处赋初值

#include <stdio.h>

int main(void)

{

int aa;

int *const cp = &aa; /* 正确的,只能在此处赋值 */

return 0;

}

常量指针侧重于常量,说明指针指向的内容是常量,指针本身可以改变但是指向的内容不能改变,形式如:const int *a;或者int const *a; 英语读作a point to const int记住,还是const在谁后面就修饰谁,如果在最前面就后移一位。

#include <stdio.h>

int main(void)

{

int aa;

const int *p;

aa = 1;

p = &aa;

aa = 2;

*p = 3; /* 错误的,不能对*p赋值 */

return 0;

}

技术分享

在上例中,并不是说aa所在地址的值不能改变了,只是不能通过指针p进行改变,更多的是向编译器进行的说明。

指针函数和函数指针

 

#include <stdio.h>

int main(void)

{

int aa;

const int *p;

aa = 1;

p = &aa;

aa = 2;

*p = 3;

return 0;

}

C语言指针大杂烩