指针数组和数组指针与二维数组
指针数组:
int *p[2]; // p先与[]组合成为数组,所以这个玩意是个数组
数组指针:
int (*p)[2]; // p先与*组合成为指针,所以这个玩意是个指针
符号优先级:() > [] > *
指针数组的demo:
#include <stdio.h> int main() { // 声明一个指针数组,每个元素是指向整数的指针 int *ptrArray[3]; // 声明一些整数变量 int num1 = 10; int num2 = 20; int num3 = 30; // 将指针数组的元素指向这些整数变量的地址 ptrArray[0] = &num1; ptrArray[1] = &num2; ptrArray[2] = &num3; // 使用指针数组访问这些整数变量的值 printf("Value of num1: %d\n", *ptrArray[0]); // 输出:10 printf("Value of num2: %d\n", *ptrArray[1]); // 输出:20 printf("Value of num3: %d\n", *ptrArray[2]); // 输出:30 return 0; }
指针数组和二维数组的关系:
指针数组指向一个二维数组时,每个指针元素指向二维数组的一行,如下示例:
#include <stdio.h> #include <string.h> int main() { int *p[2]; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; p[0] = a[0]; p[1] = a[1]; printf("p[0][0] = %d\n", p[0][0]); printf("p[0][2] = %d\n", p[0][2]); printf("p[1][2] = %d\n", *(p[1] + 2)); // 指针加法操作是按照指针的类型计算偏移量 }
数组指针和二维数组的关系:
数组名本身就是一个指向数组首元素的指针。例如,array 是一个指向 array[0] 的指针。
#include <stdio.h> #include <string.h> int main() { int (*p)[3]; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; p = a; printf("p[1][2] = %d \n", p[1][2]); printf("p[1][2] = %d \n", *(*(a + 1) + 2)); printf("p[1][2] = %d \n", *(*(p + 1) + 2)); printf("(*p)[0] = %d \n", (*p)[0]); printf("(*p)[1] = %d \n", (*p)[1]); }
三种方式实现二位数组求得所有元素的和:
用二维数组的方式:
#include <stdio.h> #include <string.h> int add(int a[][3], int x, int y) { int num = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) num += a[i][j]; return num; } int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int num = 0; num = add(a, 2, 3); printf("num = %d \n", num); }
用指针数组的方式:
#include <stdio.h> #include <string.h> int add(int *b[2], int x, int y) { int num = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) num += b[i][j]; return num; } int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int num = 0; int *b[2]; b[0] = a[0]; b[1] = a[1]; num = add(b, 2, 3); printf("num = %d \n", num); }
用数组指针的方式:
#include <stdio.h> #include <string.h> int add(int (*b)[3], int x, int y) { int num = 0; for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) num += *(*(b + i) +j); return num; } int main() { int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int num = 0; int (*b)[3]; b = a; num = add(b, 2, 3); printf("num = %d \n", num); }