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

C语言数组二次传递给函数后读取值异常问题问询

问题原因

问题的核心是func1调用func2时传递的指针类型不匹配,属于典型的指针传参错误:

  • func1的形参uint8_t* mArray是一个存储在栈上的一级指针变量,它的值是数组首元素的地址,所以在func1内直接通过mArray[i]访问数组内容是完全正确的。
  • 你在func1中调用func2(pos,&mArray)时,&mArray取的是这个指针变量自身的栈内存地址,属于uint8_t**二级指针类型,但func2的形参要求接收的是指向数组首地址的uint8_t*一级指针。
  • 当你把二级指针强制当成一级指针用的时候,func2里mArray[i]实际访问的是func1栈区的内存内容,而不是原数组的内容,自然会输出无意义的栈垃圾值。
修复方案
  • 直接修改func1内的调用代码即可,不需要对指针变量取地址,直接传递指针本身的值(也就是数组首地址):
func2(pos, mArray);
  • 额外补充:你main.c里的调用写法也不规范,uint8_t mArray[8]的数组名本身就是首元素的一级指针,不需要写(uint8_t*)&mArray,直接写func1(2, mArray)就可以,当前写法虽然运行正常但属于类型强转的巧合正确,不建议这么写。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:18:02