You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多维指针数组的指针传递给函数

嘿,我来帮你把这两个问题讲明白:

关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:59:21