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

C语言将多维数组作为函数参数传递时出现类型警告如何解决

问题根因

你触发警告的核心原因是memmove函数的参数类型传错了,和矩阵传递的逻辑无关:

  • 你之前判断问题出在矩阵传递环节是误判,unsigned char (*matrix)[4]接收二维数组、调用时传入matrix(数组名自动退化为第一行指针)的语法完全正确
  • memmove的第一个参数要求是目标内存的起始地址(指针类型),你写的matrix[i][j]是取出二维数组对应位置的unsigned char类型整数值,不是指针,编译器自然会报「把整数转成指针没有类型转换」的警告。

修复方案

仅需要给报错行的matrix[i][j]增加取地址符&,拿到元素的内存地址传给memmove即可,修改后代码如下:

void initialize(const unsigned char *p, unsigned char (*matrix)[4]) {
   for (unsigned int i = 0; i < 4; i++){
       for (unsigned int j = 0; j < 4; j++){
           memmove(&matrix[i][j], p + (4*i+j), 1);
       }
   }
}

因为你每次仅拷贝1字节,不需要调用memmove,直接赋值写法更简洁、执行效率更高:

matrix[i][j] = p[4*i + j];

额外优化方案

4x4的unsigned char矩阵是连续内存布局,不需要嵌套循环逐个拷贝,直接一次性拷贝16字节即可,代码更简洁性能也更好:

void initialize(const unsigned char *p, unsigned char (*matrix)[4]) {
    memmove(matrix, p, 16);
}

内容的提问来源于stack exchange,提问作者Darkonode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:04