指针基础(指针数组、数组指针、函数指针、函数指针数组)
1.将多个数据的首元素地址存放在一个数组里 ---- 指针数组(整形、字符)
int main(){ //将数组里的首元素地址存放在一个数组里 ---- 指针数组(整形、字符) int a = 10; int b = 20; int c = 30; int* parr[3] = {&a,&b,&c}; int i = 0; for (i = 0; i < 3; i++){ printf("%d\n", *(parr[i])); // 10 20 30 } return 0; } ------------------ 使用方法一般如以下 ---------------------- int main(){ int arr1[] = { 1, 2, 3, 4, 5 }; int arr2[] = { 2, 3, 4, 5, 6 }; int arr3[] = { 3, 4, 5, 6, 7 }; int* pArr[] = { arr1, arr2, arr3 }; int i = 0; for (i = 0; i < 3; i++){ int j = 0; for (j = 0; j < 5; j++){ printf("%d ", *(pArr[i] + j)); // 1 2 3 4 5 \n 2 3 4 5 6 \n 3 4 5 6 7 }; printf("\n"); } return 0; }
2.将一整个数组的地址存放在一个指针里 ---- 数组指针
int main(){ // 将一整个数组的地址存放在一个指针里,如果只有一个数组的话存首元素地址最后解出来更方便 int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int (*p)[10] = &arr; int i = 0; for (i = 0; i < 10; i++){ printf("%d ", (*p)[i]); // 1 2 3 4 5 6 7 8 9 10 //printf("%d ", *(*p + i)); // 1 2 3 4 5 6 7 8 9 10, 注: *p == arr == 首元素地址 } return 0; } ------------------ 使用方法一般如以下 ---------------------- void print1(int arr[3][5], int x, int y){ // 参数是数组的形式 int i = 0; for (i = 0; i < x; i++){ int j = 0; for (j = 0; j < y; j++){ printf("%d ", arr[i][j]); // 1 2 3 4 5 \n 2 3 4 5 6 \n 3 4 5 6 7 } printf("\n"); } }; void print2(int (*p)[5], int x, int y){ // 参数是指针的形式 p为一整个数组的指针 int i = 0; for (i = 0; i < x; i++){ int j = 0; for (j = 0; j < y; j++){ printf("%d ", (*(p + i))[j]); // 1 2 3 4 5 \n 2 3 4 5 6 \n 3 4 5 6 7 //printf("%d ", *(*(p + i)+j)); // 1 2 3 4 5 \n 2 3 4 5 6 \n 3 4 5 6 7 }; printf("\n"); }; }; int main(){ int arr[3][5] = { {1,2,3,4,5}, {2,3,4,5,6}, {3,4,5,6,7} }; //print1(arr, 3, 5); print2(arr, 3, 5); return 0; }
3.将一个函数的地址存放在指针里 ---- 函数指针
int add(int x, int y){ int z = 0; z = x + y; return z; }; int main(){ // 将一个函数的地址存放在指针里,函数没有首个元素之说,&函数名 和 函数名 都是函数的地址 int a = 10; int b = 20; int (*pa)(int,int) = add; int tem = (*pa)(2, 3); // 对于函数来说 (*pa) 可以直接写成 pa printf("%d", tem); // 5 return 0; }
4.将一个数组用来存放函数的(指针)地址 ---- 函数指针数组
int Add(int x, int y){return x + y;} int Sub(int x, int y){return x - y;} int Mul(int x, int y){return x * y;} int Div(int x, int y){return x / y;} int main() { int(*parr[4])(int, int) = {Add, Sub, Mul, Div};// 这个数组用来存放函数的(指针)地址 int i = 0; for (i = 0; i < 4; i++){ printf("%d\n", parr[i](2, 3));//5 -1 6 0 } return 0; }
本文来自博客园,作者:封兴旺,转载请注明原文链接:https://www.cnblogs.com/fxw1/p/15098587.html