如何将多维指针数组的指针传递给函数
嘿,我来帮你把这两个问题讲明白:
关于myfunct(int x)中参数x的类型
这个其实非常直接——参数x的类型就是**int。当你调用这个函数时,传入的int值会被复制一份到参数x中,这是典型的值传递**,函数内部对x的修改不会影响到原变量。
如何传递多维指针数组的指针给myFunction
这个得先明确你的多维指针数组具体类型,我用最常见的二维指针数组例子来一步步拆解:
示例场景:二维int指针数组
假设你在main里定义了一个存储int指针的二维数组:
#include <stdio.h> // 先声明myFunction的原型,参数类型要和数组退化后的指针匹配 void myFunction(int* (*ptr_arr)[3]); int main() { int val1 = 10, val2 = 20, val3 = 30; int val4 = 40, val5 = 50, val6 = 60; // 定义一个2行3列的int指针数组 int* arr[2][3] = {&val1, &val2, &val3, &val4, &val5, &val6}; // 直接传递数组名即可,数组会自动退化为指向首元素的指针 myFunction(arr); return 0; } void myFunction(int* (*ptr_arr)[3]) { // 访问数组元素的示例:打印第一个指针指向的值 printf("第一个元素的值:%d\n", *ptr_arr[0][0]); // 输出10 // 遍历整个数组 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("%d ", *ptr_arr[i][j]); } printf("\n"); } }
关键知识点解释
- 当你定义
int* arr[2][3]时,arr的原生类型是int* [2][3](即“元素为int*的二维数组”)。但作为函数参数传递时,数组会退化为指向其第一个元素的指针,也就是int* (*)[3](指向“长度为3的int*一维数组”的指针)。 - 函数参数必须写成
int* (*ptr_arr)[3],这里的[3]不能省略——C语言需要这个维度长度来计算内存偏移,才能正确访问数组元素。
更高维数组的扩展
如果是三维指针数组,比如int* arr[2][3][4],那么对应的函数参数类型就是int* (*ptr_arr)[3][4],以此类推,除了第一维,其他维度的长度都要明确写出。
更灵活的写法:可变长度数组(VLA)
如果你的数组维度是动态的,可以用C99及以后支持的可变长度数组(VLA),这样函数能适配不同长度的数组:
#include <stdio.h> // 先传入维度,再传入数组指针 void myFunction(int rows, int cols, int* (*ptr_arr)[cols]); int main() { int* arr[2][3] = {...}; // 同之前的定义 myFunction(2, 3, arr); return 0; } void myFunction(int rows, int cols, int* (*ptr_arr)[cols]) { for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { printf("%d ", *ptr_arr[i][j]); } printf("\n"); } }
内容的提问来源于stack exchange,提问作者Man jpeglover
相关产品推荐
相关产品推荐

