数组的行数和列数

时间:2014-12-24 14:20:49

标签: c arrays multidimensional-array

我在学院创建了一个在DevC ++中运行良好的程序,但回到家时它在Code :: Blocks中不起作用,我不知道出了什么问题。我想计算2D整数数组(全0)的行数和列数,然后我发现即使使用1D数组,我使用的方法也是不正确的。你能告诉我什么是错的吗?

#include <stdio.h>
#include <stdlib.h>
#define L 5
#define C 2
#define N 10

int main()
{
    int T[L][C],M[N],i=0,j=0,k=0;
    for(i=0;i<L;i++) for(j=0;j<C;j++) T[i][j]=0;
    for(k=0;k<N;k++) M[k]=0;
    i=0;
    j=0;
    k=0;
    while(T[i][0]==0) i++;
    while(T[0][j]==0) j++;
    while(M[k]==0) k++;
    printf("The number of lines is: %d.\nThe number of columns is: %d.\n",i,j);
    printf("The number of lines is: %d.\nThe number of columns is: %d.\n",L,C);
    printf("The number of lines is: %d.\n",k);
    printf("The number of lines is: %d",N);
    getch();
    return 0;
}

2 个答案:

答案 0 :(得分:3)

在本声明中,

while(T[i][0]==0) i++;

i值将继续递增,但i的绑定检查在哪里?它可能超出了已定义数组的实际分配维度,并导致Undefined behavior

同样适用于while(T[0][j]==0) j++;while(M[k]==0) k++;

答案 1 :(得分:2)

你的条件错了。

while(T[i][0]==0) i++;
while(T[0][j]==0) j++;
while(M[k]==0) k++;

即使分配了记忆,也有可能存在0。在没有索引范围检查或超出范围的异常的旧版本中,即使达到指定的长度,它也可以继续运行。 所以你找到数组长度的方法是错误的。此外,如果没有为数组动态分配内存,并且您知道您的数组将具有固定长度,那么为什么还要检查它的大小。从我看到的,你想要数不。你的数组中的某些值,然后有很多算法可用于搜索。应用其中之一:)