首页 > 解决方案 > 矩阵的第一个索引被忽略

问题描述

我正在尝试查看 4x4 矩阵是否是对称的,以下是我目前所拥有的。编译后我收到消息:

pExam3p2.c:12:13: warning: expression result unused [-Wunused-value]  
                                if (Num[r,c]==Num[c,r]){  
                                        ^
pExam3p2.c:12:23: warning: expression result unused [-Wunused-value]
                                if (Num[r,c]==Num[c,r]).

我认为添加一个 else 语句可以解决这个问题。但事实并非如此。非常感谢任何想法。谢谢!

#include <stdio.h>
char isSymm (int Num[][4], int rows, int cols){
    int r,c, count=0;

    for (r=0; r<rows; r++){
        for (c=0; c<cols; c++){
            if (Num[r,c]==Num[c,r]){
                count=count+1;
            }
            else{
                count=count;
            }
        }
    }
    if (count==16){
        return 'y';
    }
    else {
        return 'n';
    }
}

int main (void){
    int Num[4][4];
    int c;
    int r;
    int size =4;

    for (r=0;r<size; r++){
        for (c=0; c<size; c++){
            printf("Enter your number: ");
            scanf("%d", &Num[r][c]); //NOTE THE &...
        }
    }

    char result= isSymm(Num, 4, 4);
    printf("%c", result);
}

标签: cmatrixsymmetricsymmetry

解决方案


Num不是“多维”数组(C 没有这些),它是数组数组。因此,要获得其中的一个元素,您需要执行例如Num[r][c].

要解释发生了什么Num[r,c]您需要了解逗号运算符

逗号运算符计算两个子表达式,并丢弃左侧表达式的结果,结果是右侧表达式的结果。因此,r,crandc进行评估,然后r丢弃 的结果,结果为r,cis c

那说明你的表情Num[r,c]是真的Num[c]。AndNum[c]是一个数组,它衰减为指向其第一个元素的指针,即&Num[c][0],然后您比较这两个指针。


在一个无关的注释上,

else{
    count=count;
}

实际上毫无价值,您可以将其完全删除。


推荐阅读