【发布时间】:2016-01-18 08:08:18
【问题描述】:
我一直在 HackerRank 处理 this 简单编码挑战。我决定将我的解决方案实现为 C 函数,因为任何用另一种语言或主函数本身执行的操作似乎都是微不足道的。我以为我会用这种方式搞砸数组/指针语法几次,这样我就有机会学到一些东西。
这是我的功能:
int sum_diagonal(int n, int (*arr)[n]) {
int lD, rD, sum;
for(int i = 0; i < n; ++i) {
for(int j = 0; j < n; ++j) {
if (i == j) {
rD += arr[i][j];
}
if ((i+j) == (n-1)) {
lD += arr[i][j];
}
}
}
sum = abs(lD - rD);
return sum;
}
这是调用它的main() 函数(提供了输入矩阵的代码):
int main(){
int n;
scanf("%d",&n);
int a[n][n];
for(int a_i = 0; a_i < n; a_i++){
for(int a_j = 0; a_j < n; a_j++){
scanf("%d", &a[a_i][a_j]);
}
}
//printf("why does this make it work?");
int sum = sum_diagonal(n,a);
printf("%d", sum);
return 0;
}
有时它完全按预期工作,有时我得到垃圾输出。不过,更奇怪的是,如果我取消注释主函数中的随机 printf() 调用,它似乎每次都有效。怎么回事?
【问题讨论】:
标签: c arrays pointers initialization