关于C#:当两个值都是int时,’int’和’struct member’之间的二进制==

Binary == between 'int' and 'struct member' when both values are int

我有一个结构数组,其中有一个数组。

1
2
3
4
5
6
struct member{
int num;
char name[10];
int m[5];
int counter;
}ptr[10];

我尝试键入一个条件,比较结构中数组的值和包含该结构的数组的值。当我进行二进制比较时,我得到一个错误,一个是"int",另一个是结构成员。结构成员也是int(一个int值的数组),为什么我会遇到这个问题呢?

1
2
3
4
5
6
7
8
9
void checkiffriends(){
for(i=0; i < 10; i++){
    for(j=0; j < 5; j++){
        if(ptr[i].m[j] == ptr[i+1]){
            printf("they are friends!", );
        }
     }
  }
}


你不是在比较两个整数。您试图将m[j]与它所在的结构进行比较。也许您的意思是ptr[i].num或.counter


ptr[i].m[j] == ptr[i]的意思可能是ptr[i].m[j] == i揭示了算法的缺陷。

我假设m数组代表该ptr[i]的"我是……"的索引。所以对于一个给定的ptr[i],你要列出他的所有朋友,意思是

  • 检查所有其他ptr[j]i!=j,看i是否在该其他"人"的m清单中。

这个假设正确吗?

这会导致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void checkiffriends(){
   int i,j,k;
   for(i=0; i < 10; i++){
      for(j=0; j < 10; j++){
         if (i != j) {
            for(k=0; k < 5; k++){
               if(ptr[j].m[k] == i){
                  printf("%d is friend of %d
"
, j, i); // indexes
                  printf("%s is friend of %s
"
, ptr[j].name, ptr[i].name); // names
               }
            }
         }
      }
   }
}


ptr[i]是一个结构。ptr[i].m[j]是一个整数。

不能将结构与整数进行比较。

可以比较两个结构,或者两个整数。

The struct member is also an int (an array with int value)

这是错误的。结构包含整数数组。所以比较它们是没有意义的。


你在if条件下尝试了(i+1)而不是ptr[i+1]吗?我认为这是避免错误的更好方法。


如果我猜对了,您希望将结构成员引用存储在变量m中。

1
2
3
4
5
6
struct member{
   int num;
   char name[10];
   struct member* m; //correction
   int counter;
}ptr[10];


你到底想做什么还不清楚,但根据你的错误判断,这可能是:

1
2
3
4
5
6
7
8
9
void checkiffriends(){
for(i=0; i < 10; i++){
    for(j=0; j < 5; j++){
        if(ptr[i].m[j] == i){ //Change from ptr[i] to i
            printf("they are friends!", );
        }
     }
  }
}