Странное несовместимое назначение указателей - PullRequest
2 голосов
/ 03 июня 2010

Я работаю над кодом Си.

Есть такая функция;

void Get(double x_la[], 
double y_la[], 
double z_la[])

в теле функции, по некоторым другим причинам, которые я создаю;

double (*la)[3];

Насколько я понял, x_la, y_la и z_la - указатели типа double.

Мне нужно «соединить» указатели, участвующие в «la», с предыдущими, так что я подумал, пытаясь;

la[0]=x_la;
la[1]=y_la;
la[2]=z_la;

но при компиляции с компилятором gnu я получаю ошибку;

ошибка: несовместимые типы при присвоении 'double *' к 'double [3]'

Что я делаю не так? В противном случае, как это можно сделать хорошо?

Спасибо

P.D. Это точно так же, чтобы объявить

double y_la []

или

двойной * у_ла

1 Ответ

4 голосов
/ 03 июня 2010

Вы хотите double *la[3];.

Как вы понимаете, la - это не указатель на двойное число, а один указатель на массив из трех вещей, и поэтому каждое la[i] все еще является указателем на что-то отличное от двойного, что вдвойне проблематично, поскольку у вас действительно есть только один из них.

Что касается второго вопроса, они совпадают только в списке параметров, и даже тогда только в объявлении старого стиля. После ввода прототипа соответствие типов регулируется более точным набором правил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...