【问题标题】:Dereferencing issue in CC中的取消引用问题
【发布时间】:2010-02-20 16:35:04
【问题描述】:

当我尝试编译下面的代码时,出现以下错误:

错误 C2440:“>=”:无法从“双 *”转换为“双”

错误 C2440:“>=”:无法从“双 *”转换为“双”

我相信我正确地取消引用了所有内容

#define TRUE 1
#define FALSE 0;

#include <stdio.h>

typedef struct Con{
  double samTime[2];
  double sen[2];
  int test[2];
} CON, *CON_PTR;

void GM(double **TTXY) {
  int NoS;
  int numOfSen = 2;
  int startTime =0;
  CON con;

  if((con = (CON_PTR) malloc(numOfSen*sizeof(CON)))==NULL) {
    printf(“Malloc failed\n”);
    exit(1);
  }
  for (NoS=0;NoS<numOfSen;NoS++) {
    con[NoS].samTime[0] = startTime;
    con[NoS].samTime[1] = startTime;
    con[NoS].sensor[0] = 0;
    con[NoS].sensor[1] = 0;
    con[NoS].test[0] = FALSE;
    con[NoS].test[1] = FALSE;
  }

  if (con[NoS].samTime[0] >= TTXY[1]) {
    con[NoS].test[0] = TRUE;
  }
  if (con[NoS].samTime[1] == TTXY[1]) {
    con[NoS].test[1] = TRUE; 
  }
}

【问题讨论】:

  • 发布实际代码。您发布的示例中没有conTTXY 的定义。此外,int NoS 行格式错误。
  • #defining FALSE 包含分号是一个等待发生的错误。

标签: c data-structures memory-management


【解决方案1】:

首先,少了一个分号

int NoS

而你的主要功能不正确,这个必须是其中之一

int main()
int main(int argc, char **argv)
void main() // not standard but allowed by some compilers (with warning)

关于您的问题,不,您没有正确取消引用它,因为您的 TTXY 数组是二维的。所以应该是这样的

if (con[NoS].samTime[0] >= TTXY[1][some other number]) {

任何适用于您的代码的方法。如果其他人应该理解代码,您应该为变量使用更具描述性的名称。

如果TTXY真的应该是一个一维数组,那么你不需要通过引用传递它(function(&amp;TTXY)),传递指针值(function(TTXY))就足够了,并且更具可读性。

【讨论】:

    【解决方案2】:

    TTXY 被声明为 double **,因此 TTXY[1] 是 double *,而不是 double,因此您无法将 TTXY[1] 与 con[NoS].samTime[0] 进行比较。

    我猜可能是你的函数头有错字,尝试修改为 void main(double *TTXY)?

    【讨论】:

    • @anon 我建议您更改函数名称,因为使用 'main' 可能会导致歧义。
    • main唯一标准签名是:int main(void)int main(int argc, char **argv)void main(double **TTXY) 永远不会工作。
    【解决方案3】:

    为什么你的主函数有签名

    (int)(double**)
    

    要成为一个有效的 C 程序,main 必须有签名:

    (int)(int, char**)
    

    如果您希望 main 以另一种方式处理其参数,那么您需要自行转换它们。

    【讨论】:

      【解决方案4】:

      您的程序中有四个语法错误。

      1. int Nos - 缺少分号。
      2. con - 此变量在使用前未声明。
      3. sensor 不是 struct Con 的成员。
      4. TTXY 是一个指向 double 的指针,而不是指向 double 的指针,所以你应该使用 *TTXY[1] 通过 TTXY 双指针数组中的第一个双指针访问第一个双指针。

      注意:

      1. 通常你应该遵循main函数的标准形式,但没有定义你自己的版本。main函数的正常版本应该是int main(void)int main(int argc, char *argv[])
      2. 您应该包含 以使 gcc 足够高兴而不给您任何警告。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        • 2013-02-21
        • 2022-12-20
        • 1970-01-01
        • 2012-10-30
        相关资源
        最近更新 更多