Проблема разыменования в C - PullRequest
       16

Проблема разыменования в C

0 голосов
/ 20 февраля 2010

, когда я пытаюсь скомпилировать мой код ниже, я получаю следующие ошибки:

ошибка 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 ]

1 голос
/ 20 февраля 2010

Почему ваша основная функция имеет подпись

(int)(double**)

Чтобы быть действительной программой на C, main должна иметь подпись:

(int)(int, char**)

Если вы хотите, чтобы main обрабатывал свои аргументы другим способом, вам нужно преобразовать их самостоятельно.

1 голос
/ 20 февраля 2010

Во-первых, пропущена точка с запятой

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)) будет достаточно и более читабельно. 1018 *

1 голос
/ 20 февраля 2010

TTXY объявлен как двойной **, поэтому TTXY [1] является двойным *, а не двойным, поэтому вы не можете сравнить TTXY [1] с con [NoS] .samTime [0].

Полагаю, возможно, у вас есть опечатка в функциональной главе, попробуйте изменить ее, чтобы void main (double * TTXY)?

0 голосов
/ 20 февраля 2010

В вашей программе четыре синтаксических ошибки.

  1. int Nos - отсутствует точка с запятой.
  2. con - эта переменная не объявляется перед использованием.
  3. sensor не является членом struct Con.
  4. TTXY - это указатель на указатель на удвоение, а не на удвоение, поэтому вы должны использовать *TTXY[1] для доступа к первой двойной точке по первому двойному указателю в массиве TTXY double pointer.

Примечание:

  1. Обычно вы должны следовать стандартной форме функции main, но не определять свою собственную версию. Обычная версия функции main должна быть int main(void) или int main(int argc, char *argv[]).
  2. Вы должны включить , чтобы сделать gcc достаточно счастливым, чтобы не предупреждать вас.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...