Ошибка несовместимого типа указателя - PullRequest
1 голос
/ 09 сентября 2011
int main()
{
double x = 10.08;
double *p;
p = &x;
printf("value of pointer is %d\n",p);
*p=&x;//error line
printf("value of x, *p = %lf\n",x);
return 0;
}

когда я делаю это для типа int (то есть int x, int * p), все работает нормально.Но не вдвойне, почему?

Ответы [ 3 ]

2 голосов
/ 09 сентября 2011

*p имеет тип double; &x имеет тип double *. Они несовместимы.

Кстати, чтобы распечатать значения указателя, используйте преобразование %p:

printf("value of pointer is %p\n", p);
0 голосов
/ 09 сентября 2011

Заменить

 *p = &x                         with     *p = (unsigned int) &x  \\ this works
 *p = &x it means x = &x ; Not a syntax to follow

Хотя это не должно выполняться в c, потому что * p, inturns означает значение x, и вы хотите сохранить адрес в значении x, но вы не объявили его как указатель, а просто обычную переменную.

однако с int вы не получите никакой ошибки, кроме предупреждения о том, что

 non portable assigment 

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

* * 1010

Но я настоятельно рекомендую не следовать приведенному выше синтаксису.

люди не всегда используют двойной указатель. Вместо этого обращайтесь к пустому указателю

0 голосов
/ 09 сентября 2011

*p относится к типу double.&x имеет тип указатель на двойной.Почему вы ожидаете, что они будут совместимы?

Я ожидаю, что ваш компилятор, если вы включите (и прочитаете) предупреждения, пожалуется на это даже при int s.

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