向函数传递float矩阵时出现垃圾值的问题咨询
问题分析与解决
错误根源
核心问题是格式符与变量类型不匹配:代码里用printf("%d ", arr[i][j]);输出浮点数,%d是专门用于输出整数(int类型)的格式符,程序会把float的二进制数据按照int的规则解析,自然输出垃圾值。换成int数组时正常,是因为此时格式符和变量类型刚好匹配。
修正后的代码
#include <stdio.h> // n must be passed before the 2D array void print(int m, int n, float arr[][n]) { int i, j; for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { // 用%f输出浮点数,若想输出整数形式可改用%.0f printf("%.0f ", arr[i][j]); } printf("\n"); // 可选:每行结束换行,让输出更清晰 } } int main() { float arr[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int m = 3, n = 3; print(m, n, arr); }
关键说明
- 输出float类型数据时,要使用对应格式符:
%f用于输出带小数的浮点数,%.0f可以去掉小数部分,输出你期望的整数形式结果。 - 二维数组的传递逻辑是正确的(先传递列数n,再传递二维数组),这部分无需修改。
内容的提问来源于stack exchange,提问作者The Testosterone Fanatic
相关产品推荐
相关产品推荐

