我是C的新手。我声明了2D全局数组:
int allhospitalsdata[4][3] = {{1,100,0},{2,200,0},{3,300,0},{4,400,0}};
然后,我尝试像这样在某个索引处访问值:
if (allhospitalsdata[hospitalid][3]<allhospitalsdata[hospitalid][2])
{
//do something
}
else
{
//do another thing
}
测试条件时,它总是转到else
块。为什么?
因为您正在访问allhospitalsdata[hospitalid]
的第四个元素,该元素仅包含三个元素。实际上,C不会阻止您访问无效索引处的数组。您必须自己照顾自己。发生的是,在allhospitalsdata[hospitalid][3]
中(这不是数组的一部分!),存储了一些未定义的东西,通过观察if
条件,该值可能大于或等于零。这就是为什么它进入else
块的原因。
请注意,C中的数组始终为零索引,因此allhospitalsdata[0]
引用first医院的数据。
我不知道您要实现什么,但是将2D数组想象成一个包含行和列的表。对于a[x][y]
,x
用于访问行,而y
用于访问列在该行中。
如果您还有其他问题,请澄清。