2010-11-15 6 views
-1

У меня есть указатель на символ, и я хочу показать целочисленное значение. Тогда верно следующее утверждение:Как выполнить приведение типов?

printf("%d",*(int *)ptr); 

Может ли у вас немного объяснить мне?

+0

Целое значение чего? Из первого персонажа? Что он содержит в виде строки? –

+2

Откуда это целочисленное значение? Строка должна содержать целое число, т. Е. Строку «12»? Или вам нужны значения ASCII в строке? Или что? –

+0

Вы изучили api atoi(). Который преобразует строку в целое напрямую – Alam

ответ

2

Если указатель на символ (строка) указывает на действительную C-строку, которая хранит номер в строчном формате, например "123", просто используйте спецификатор формата %s.

printf("%s", ptr);

Формат %d спецификатор используется для печати номеров, сохраненных в виде двоичных целых чисел типа int.

0

Нет, это вообще неправильно, потому что char составляет всего 1 байт, а int - это обычно 4 байта. Остальные байты, к которым вы обращаетесь, могут быть недействительными в зависимости от того, на что он указывает, и это может быть неопределенное поведение. Правильный способ сделать это было бы получить значение char первым, а затем бросить его в int:

(int)*ptr 

Конечно, в этом случае явное приведение может не понадобиться вовсе, так как значение символа будет неявно повышаться до целого числа.

0

Было бы полезно знать, какой тип переменной ptr был объявлен.

Если было объявлено int * ptr; то потребуется только де-ссылка

т.е. printf ("% d", * ptr);

, потому что PTR имеет тип Int *, а * PTR поэтому типа Int, что соответствует% D

Однако я угадываю PTR была признана недействительной * PTR; в вашем примере, в этом случае , если вы знаете, что это на самом деле указывает на int, тогда отбрасывание из общего указателя типа int * является правильным, а затем де-ссылкой.

ie. printf ("% d", * (int *) ptr);

Смежные вопросы