gpt4 book ai didi

c - 我应该将赋值放在 for 循环中还是不在循环中?

转载 作者:太空宇宙 更新时间:2023-11-04 00:43:56 24 4
gpt4 key购买 nike

#include <stdio.h>
void print1(int m, int n, double (*p)[m][n]);
void print2(int m, int n, double (*p)[m][n]);
void print3(int m, int n, double (*p)[m][n]);
void print4(int m, int n, double (*p)[m][n]);
void print5(int m, int n, double (*p)[m][n]);
int main(void)
{
double a[3][2] = {{1, 2}, {3, 4}, {5, 6}};

print1(3, 2, &a);
print2(3, 2, &a);
print3(3, 2, &a);
print4(3, 2, &a);
print5(3, 2, &a);

return 0;
}
void print1(int m, int n, double (*p)[m][n])
{
double subTotal;
subTotal = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
subTotal += (*p)[j][i];
printf("%lf~~~", subTotal);
}
printf("\n");
}
printf("******************\n");
}
void print2(int m, int n, double (*p)[m][n])
{
double subTotal;
for (int i = 0, subTotal = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
subTotal += (*p)[j][i];
printf("%lf~~~", subTotal);
}
printf("\n");
}
printf("******************\n");
}
void print3(int m, int n, double (*p)[m][n])
{
double subTotal;
for (int i = 0; i < n; i++) {
subTotal = 0;
for (int j = 0; j < m; j++) {
subTotal += (*p)[j][i];
printf("%lf~~~", subTotal);
}
printf("\n");
}
printf("******************\n");
}
void print4(int m, int n, double (*p)[m][n])
{
double subTotal;
for (int i = 0; i < n; i++) {
for (int j = 0, subTotal = 0; j < m; j++) {
subTotal += (*p)[j][i];
printf("%lf~~~", subTotal);
}
printf("\n");
}
printf("******************\n");
}
void print5(int m, int n, double (*p)[m][n])
{
double subTotal;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
subTotal = 0;
subTotal += (*p)[j][i];
printf("%lf~~~", subTotal);
}
printf("\n");
}
printf("******************\n");
}

看上面的代码。我写了五个 C 函数,分别是 print 1 ~ print 5。

它们之间唯一的区别是subTotal = 0的位置

对我来说,print1、print3 和 print5 很容易理解。

我预计 print2 与 print1 相同,print4 与 print3 相同。

但结果证明我错了。这是输出:

1.000000~~~4.000000~~~9.000000~~~
11.000000~~~15.000000~~~21.000000~~~
******************
0.000000~~~0.000000~~~0.000000~~~
0.000000~~~0.000000~~~0.000000~~~
******************
1.000000~~~4.000000~~~9.000000~~~
2.000000~~~6.000000~~~12.000000~~~
******************
0.000000~~~0.000000~~~0.000000~~~
0.000000~~~0.000000~~~0.000000~~~
******************
1.000000~~~3.000000~~~5.000000~~~
2.000000~~~4.000000~~~6.000000~~~
******************

我想不通为什么 print2 和 print4 打印的结果与我的预期不同。

为什么我理解错了?

最佳答案

此处 for(int i = 0, subTotal = 0; ... 在循环的 init 语句中定义了 两个 变量。第一个是 int i,第二个是 int subTotal,它将 double subTotal 隐藏在函数的顶部(不使用)。

因此,print2print4 使用 %lf 格式说明符来打印整数,这是未定义的行为。

添加-Wall -Wextra -Wshadow to GCC对所有这些影响发出警告。

关于c - 我应该将赋值放在 for 循环中还是不在循环中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52491725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com