December 3, 2015 1:41 PM
指针是C语言的一大特色,让我们可以访问硬件,让c变得威力无穷,然而,与之相伴的是不小的风险。
1.牛刀小试–常见指针的含义
形式 | 含义 |
---|---|
void (*f)() | 函数指针,本质是一个指针 |
void* f() | 函数返回指针,指针函数,本质是一个函数 |
const int * | 常量指针,指针本身不可变 |
int* const | 指向const修饰内容的指针,指针本身可变 |
const int *const | 指向const修饰的内容的常量指针 |
2.深入浅出–不常见指针的含义
形式 | 含义 |
---|---|
float (**p)[10] | p是一个二级指针,指向的是一个一维数组指针 |
float **p[10] | p是一个指针数组,数组中每一个元素都是指向指针的指针 |
float*((*p)[10]) | p是一个指向一维数组的指针,数组中每个元素的类型是float* |
float(*p[10])() | p是一个指针数组,数组中每一个元素都是一个函数指针 |
float*(*p)[10] | 等价于float*((*p)[10]) |
float(*(*F)(int,int))(int) | F是一个函数指针,指向函数类型输入两个int变量,返回一个 |
函数指针,这个函数指针输入一个变量,返回一个int。 |
==注意:以上类型的判断关键在于优先级的判断,[]的优先级比高,()优先级最高。*==
3.示例
int x[10] = {1,2,3,6,5,4,9,8,7,5};
int(*y)[10] = &x;
int *z = (int*)(&x);
cout << **(y+1) << endl <<*(z+1);
输出结果
4236901
2
解释
x是一个数组名,代表一个常量指针,指向数组的首地址;
y是一个指针,指向一位数组x,y+1后指向的是数组最后一个地址的下一个地址;
z是一个普通指针,z+1后,指向的是数组首地址的下一个地址。