gpt4 book ai didi

我们可以打印这样的数组吗?

转载 作者:行者123 更新时间:2023-11-30 20:07:34 25 4
gpt4 key购买 nike

#include<stdio.h>

#define N (sizeof(array) / sizeof(array[0]))

main()
{
int array[5]={1,2,3,4,5};
int d;
for(d=-1;d <= N;d++)
printf("%d\n",array[d+1]);
return 0;
}

上面的代码没有显示任何内容?谁能告诉我为什么?

最佳答案

首先,我会顺便指出,目前的代码将在数组边界之外读取,因为 d+1将是6在循环的最后一次迭代时,最高有效数组索引为 4 。但这不是代码的主要问题;就目前情况而言,当 d = -1 ,条件d <= N实际上将评估为 false ,因此循环立即终止,而不经过任何迭代。问题在于表达式 sizeof(array) / sizeof(array[0]) 的结果类型为size_t ,这是一个无符号整数,而 dint ,即一个有符号整数。在实际比较之前,d转换为size_t (这称为类型提升),产生一个大正整数,因此表达式 d <= N评估结果为假。请参阅this c-faq 条目以获取更多信息。为了真正说明这一点,您可能需要尝试以下代码,看看它是否按预期工作:

int d = -1;
printf("%u\n", d);

size_t n = 5000;
if (d > n) printf("oops!\n");

修复代码相当简单 - 例如,正如其他人所建议的那样,将循环重写为

for (d = 0; d < N; d++) {
printf("%d\n", array[d]);
}

会起作用的。

关于我们可以打印这样的数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11096915/

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