指针与数组
int a[]= {1, 2, 3, 4, 5};
- &a 与 a 在数值上相同,但是意义上不同
- &a 代表数组地址,类型为:int(*)[5]
- a 代表数组0号元素地址,类型为: int*
- 指向数组的指针: int (*pName)[5] = &a;
指针与函数
指向函数的指针
void *funcPtr(int);//错误
void (*funcPtr)(int);//正确
第一种声明中,*操作符应用于funcPtr的返回类型,因此它声明了一个返回类型为void *的函数,该函数接受一个int参数。这不是我们通常期望的函数指针。
而第二种声明中,括号将*操作符应用于funcPtr,因此它声明了一个指向函数的指针,该函数接受一个int参数并返回void。这是我们通常期望的函数指针声明方式。
函数拥有类型,函数类型由返回类型和参数类型列表组成
函数申明 | 类型 |
---|---|
int sum(int n); | int (int) |
void swap(int* pa, int* pb); | void (int*, int*) |
void g(void); | void (void) |
数组指针作为函数参数
函数参数不能是数组(否则退化为指针),但可以是指向其的指针类型,此时不会退化。
#include <stdio.h>
void test(int (*arr)[5]) {
printf("%zu ", sizeof(*arr)); // 输出20
}
int main() {
int myArray[5] = {1, 2, 3, 4, 5};
test(&myArray);
return 0;
}
参考资料: