【问题标题】:Sorting array algorithm error排序数组算法错误
【发布时间】:2015-07-28 15:00:52
【问题描述】:

您好,我编写了这个排序算法,但不知道为什么会出现以下错误:“成员引用基类型 'int' 不是结构或联合”

void sort(float avg_dist, cg[]){

    int i,j,t;

    for(i=1; i<=cg[i]-1; i++)
        for(j=1; j<=cg[i]-i; j++)
            if(cg[j-1].avg_dist >= cg[j].avg_dist){
                t = cg[j-1];
                cg[j-1] = cg[j];
                cg[j] = t;

            }

}

【问题讨论】:

  • 哪一行引发了这个错误?
  • cg 是什么类型?这是一个无效的函数声明(嗯,对编译器有效,但你不是这个意思)。
  • @EugeneSh.: “对编译器有效......”?这至少是非标准的。
  • @Olaf 查看 blue112 评论。我假设编译器没有抱怨它,否则它不会到达报告的行。
  • @EugeneSh.:很公平。我只是想知道:如果只有 C99 以上的 C 编译器启用所有相关警告并出现错误:初学者会有更多或更少的问题,还是只是焦点转移?

标签: c


【解决方案1】:

cg 是一个 int 数组。

您不能访问 int 的“成员”,如

cg[j-1].avg_dist

我不确定你想做什么。可以乘吗?

 cg[j-1] * avg_dist

【讨论】:

  • 我猜问题出在参数列表声明中。它缺少类型。
  • "没有明确类型名称的变量被假定为 int 类型。"从 C89 开始。
  • 如我所说,我相信OP不是这个意思。
  • 加一个用于乘法的洞察力。我偷的;=)
【解决方案2】:

这不是问题,但您(可能是有意地)在函数中省略了 type 说明符

void sort(float avg_dist, cg[]){

C 默认为 int 数组类型,这当然会使 cg[j].avg_dist 在语法上无效。 (实际上你可能想乘以avg_dist,使用*而不是成员选择运算符.)。

【讨论】:

  • 其实我是故意用“.”作为成员选择运算符
【解决方案3】:

这应该会给你一个清晰的想法:

#include <stdio.h>

void sortArray(int *array, int length){
  int i,j, k, temp;

  for (i = 0 ; i < length-1; i++){
    for (k = 0 ; k < length-i-1; k++){
      if (array[k] > array[k+1]){
        temp = array[k];
        array[k]   = array[k+1];
        array[k+1] = temp;
      }
    }
  }

    printf("The result:\n");

  for ( j = 0 ; j < length ; j++ ){
    printf("%d  ", array[j]);
  }
}

int main(void){
    int array[] = {1,4,2,-1,2,3,4,1,3,-1};
    int length = sizeof array / sizeof array[0];

    sortArray(array, length);
    printf("\n");

    return 0;
}

输出:

The result:
-1  -1  1  1  2  2  3  3  4  4

【讨论】:

    猜你喜欢
    • 2016-11-27
    • 1970-01-01
    • 2019-04-24
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2014-03-13
    相关资源
    最近更新 更多