C 在二维数组中搜索一行中的所有零

C 在二维数组中搜索一行中的所有零,c,arrays,C,Arrays,我试着看看是否能找到nx2d数组中的整行是否都是零,我最初有这段代码,但有人告诉我不要使用goto。我该怎么把它拿出来 int first_zero_row = -1; int i, j; for(i = 0; i < n; i++) { for(j = 0; j < n; j++){ if(A[i][j]) goto next; } first_zero_row = i; break; next: } int first\u zero\u row=

我试着看看是否能找到nx2d数组中的整行是否都是零,我最初有这段代码,但有人告诉我不要使用goto。我该怎么把它拿出来

int first_zero_row = -1;    
int i, j;
for(i = 0; i < n; i++) {
  for(j = 0; j < n; j++){
    if(A[i][j]) goto next;
  }
  first_zero_row = i;
  break;
next:
}
int first\u zero\u row=-1;
int i,j;
对于(i=0;i
例如,最有效的方法是什么?

您可以试试这个

int first_zero_row = -1;    
int flag, i, j;

for(i = 0; i < n; i++) {
    flag = 1;
    for(j = 0; j < n; j++) {
        if(A[i][j]) {
            flag = 0;
            break;
        }
    }
    if (flag) {
        first_zero_row = i;
        break;
    }
}
int first\u zero\u row=-1;
int标志,i,j;
对于(i=0;i
int first\u zero\u row=-1;
int i,j;
对于(i=0;i
我脑子里有一种可能性

更快。差不多

emptyRow[4]={0}; Rowlen=4*sizeof(elem)

(i=0;i { if(memcmp(A[i][0],emptyRow,Rowlen)) { } }
如果不使用固定零数组和系统内部
memcmp()
,这大概是我能想到的最简单的方法。它可能优化得很好,尽管我还没有发送到asm输出来验证这一点

int i,j;
for (i=0; i<n; ++i)
{
    for (j=0; j<n && !A[i][j]; ++j);
    if (j == n)
        break;
}

first_zero_row = (i < n ? i : -1);
最后,尽管我意识到这是一个C问题,但我对任何使用模板函数的固定数组C++解决方案都感兴趣的人包括以下内容。如果
std::memcmp
是一个写得很好的内在特性,则以下内容将得到充分优化:

template<int N>
int find_zero_row(int (&A)[N][N])
{
    static const int zeros[N] = {};
    int i=0;
    for (; i<N && std::memcmp(A[i], zeros, sizeof(zeros)); ++i);
    return (i < N ? i : -1);
}
模板
整数查找零行(整数(&A)[N][N])
{
静态常数int零[N]={};
int i=0;
为了
int i,j;
for (i=0; i<n; ++i)
{
    for (j=0; j<n && !A[i][j]; ++j);
    if (j == n)
        break;
}

first_zero_row = (i < n ? i : -1);
int find_zero_row(int n, int A[n][n])
{
    int zeros[n], i;
    memset(zeros, 0, sizeof(zeros));
    for (i=0;i<n && memcmp(A[i], zeros, sizeof(zeros)); ++i);
    return (i < n ? i : -1);
}
template<int N>
int find_zero_row(int (&A)[N][N])
{
    static const int zeros[N] = {};
    int i=0;
    for (; i<N && std::memcmp(A[i], zeros, sizeof(zeros)); ++i);
    return (i < N ? i : -1);
}