Указатели C: они имеют одинаковую функциональность? - PullRequest
0 голосов
/ 18 октября 2011

Допустим, у вас есть "void * a" и "void * ptr", которые указывают на разные адреса, определенные в вашем коде.Тогда мне было интересно, если эти две строки были эквивалентны и функционально одинаковы?

    *((unsigned **)((char*)ptr+4)) = a;

и

    *((unsigned *)((char*)ptr+4)) = a;

Вторая выдает предупреждение, что "присваивание делает целое число из указателя без приведения"

Кроме того, это тоже самое, что и выше, просто сделать?:

    *((char*)ptr+4) = a;

1 Ответ

6 голосов
/ 18 октября 2011

Это не эквивалентно. # 1 преобразует (char*)ptr+4 в указатель на unsigned (*unsigned), а # 2 разрешает в unsigned.

a является пустым указателем, поэтому его можно привести к *unsigned, но не к unsigned (неявно), поэтому вы получаете предупреждение.

# 3 разрешает то же самое в char, что также выдает предупреждение.

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