指针数组,数组中的元素都是指针的数组;
数组指针,指向数组的指针变量,下文有示例;
指针常量,形如 int* const p;//p是一个常量,一经初始化,便不能再指向其他变量;
常量指针,即指向常量的指针,比如:const int* p;//p指向的是常量,不能通过*p修改其值;
#include <stdio.h>
void fun1(int(*pArr)[3], int row)
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < 3; j++)
printf("%d ",pArr[i][j]);
printf("\n");
}
}
void f1(){ printf("f1\n"); }
void f2(){ printf("f2\n"); }
void f3(){ printf("f3\n"); }
int main()
{
//数组指针,即指向数组的指针变量,注意int* p;这个p只是指向一个int型变量,但不是指向一个数组
int(*pArr)[3];
int a1[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
pArr = &a1[0];//也可以简写成pArr=a1;这和int* p;int a[3];p=a;类似
int a2[2];
printf("pArr=%p,pArr+1=%p\n", pArr, pArr + 1);//相差了12个字节
printf("a2=%p,a2+1=%p\n", a2, a2 + 1);//相差4个字节
//指针数组,是一个数组,数组中的元素都是指针
char* pStr[2];
//函数指针,指向函数的指针变量
void(*pFn)(int(*pArr)[3], int row) = fun1;//省略了&
pFn(a1, 3);//省略了*号
//函数指针数组,数组中的元素是函数指针类型
void(*fn[3])() = {f1,f2,f3};
fn[0]();
fn[1]();
fn[2]();
getchar();
return 0;
}
输出:
pArr=003AFCF0,pArr+1=003AFCFC
a2=003AFCE0,a2+1=003AFCE4
1 2 3
4 5 6
7 8 9
f1
f2
f3
总结如下: