在C中解除引用问题

时间:2010-02-20 16:35:04

标签: c data-structures memory-management

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

错误C2440:'> =':无法从'double *'转换为'double'

错误C2440:'> =':无法从'double *'转换为'double'

我相信我正确地取消引用一切

#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; 
  }
}

4 个答案:

答案 0 :(得分:1)

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

我猜你可能在功能头上有拼写错误,尝试将其修改为void main(double * TTXY)?

答案 1 :(得分:1)

为什么你的主要功能有签名

(int)(double**)

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

(int)(int, char**)

如果你想让main以另一种方式处理它的参数,那么你需要自己转换它们。

答案 2 :(得分: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(&TTXY)),传递指针值(function(TTXY))将是足够多,可读性更强。

答案 3 :(得分:0)

程序中有四个语法错误。

  1. int Nos - 错过了分号。
  2. con - 使用前未声明此变量。
  3. sensor不是struct Con
  4. 的成员
  5. TTXY是一个指向double而不是指向double的指针的指针,所以你应该使用*TTXY[1]通过TTXY双指针数组中的第一个双指针来获取第一个双点
  6. 注意:

    1. 通常,您应该遵循main函数的标准格式,但未定义自己的版本。main函数的正常版本应为int main(void)int main(int argc, char *argv[])。< / LI>
    2. 您应该包含&lt; stdlib.h&gt;让gcc高兴得不要给你任何警告。