我有一个2维数组,当我第一次打印数组数据时,日期打印正确,但另一次数组[last] [i]的数据从i = 0到最后 - 1。
显然是一个逻辑错误,但我不明白原因,因为我复制并粘贴了for语句。那么......¿C改变数据?
我使用gcc -std=c99
但在此之前我尝试使用C ++和cout
语句。
#include <stdio.h>
int main(int argc, char *argv[])
{
unsigned int numero_jugaderes = 11;
unsigned int numero = numero_jugaderes - 1;
unsigned int p_a[numero];
float p_aya[numero][numero];
for (unsigned int i = 0; i <= numero; i++) {
p_a[i] = i;
}
for (unsigned int i = 0; i <= numero; i++) {
for (unsigned int j = 0; j <= numero; j++) {
p_aya[i][j] = (float) (p_a[i] * p_a[j]) / 100;
printf("%f\t", p_aya[i][j]);
}
puts("");
}
puts("\n");
for (unsigned int i = 0; i <= numero; i++) {
for (unsigned int j = 0; j <= numero; j++) {
printf("%f\t", p_aya[i][j]);
}
puts("");
}
return 0;
}
答案 0 :(得分:5)
我看到的问题是,你正在循环使用条件检查,如
for (unsigned int i = 0; i <= numero; i++)
定义为
的数组unsigned int p_a[numero];
你要去off-by-one。这实际上是无效的内存访问,它调用undefined behavior。
C数组具有基于0的索引,因此有效限制为
for (unsigned int i = 0; i < numero; i++)
答案 1 :(得分:1)
长度数的数组具有数字元素。从索引0到数字1。你正在对待他们就像他们有一个索引值。为i <= numero
切换i < numero
。对所有for循环和j。
答案 2 :(得分:0)
如果您有一个声明为numero
个元素的数组,那么索引的有效范围是[0, numero-1]
。
因此像这样的循环
for (unsigned int i = 0; i <= numero; i++) {
用于访问具有numero
元素的数组元素会导致未定义的行为。