void fun()//函数指针和指针函数
{
int a[3];
int* arr[3];//指针数组
int** aa[3][4];
int*** aaa[3][4][5];
int(*brr)[4];//数组指针:首先它是一个指针,它指向一个数组(指向数组的指针)
printf("%d\n", sizeof(a));//3*4
printf("%d\n", sizeof(arr));//3*8
printf("%d\n", sizeof(aa));//3*4*8
printf("%d\n", sizeof(aaa));//3*4*5* 8
printf("%d\n", sizeof(brr));//8(一个指针的大小永远是8(64位))
//先看()再看[];
float(**d)[10];//d是一个二级指针,指向一个一维数组的指针,数组的元素是float
double* (*g)[10];//g是一个一级指针,指向一个一维数组,数组的元素是double*
double(*f[10])();//f是一个数组,有10个元素,每一个元素都是函数指针double(*)(),函数类型是没有参数且返回值是double的函数
int* ((*b)[10]);//b是一个指针,指向一个一维数组,且数组中元素都是int*
int (*fun)(int);//fun是一个函数指针,函数接收一个int型参数,返回值为int
int (*(*F)(int, int))(int);//F是一个函数指针,函数接收(int,int),返回值类型是一个函数指针,返回值的函数指针指向有一个int类型的参数且返回int的返回值
}
void fun1()
{
int v[2][10] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
int(*a)[10] = v;
printf("%d\n", **a);//1 a[0][0]
printf("%d\n", **(a+1));// a[1][0]
printf("%d\n", *(*a+1));//2 a[0][1]
printf("%d\n", *(a[0]+1));//2 a[0][1]
printf("%d\n", *(a[1]));//11 a[1][0]
}
指针数组和数组指针
本文深入探讨了C++中的指针与数组的概念,包括函数指针、指针数组、多维指针以及数组指针的用法。通过实例展示了指针运算及数组访问的细节,如sizeof运算符的应用,以及不同层级指针的解引用方式。同时,解释了复杂指针类型的声明和理解,帮助读者掌握C++中复杂的内存操作技巧。
摘要由CSDN通过智能技术生成