У меня есть указатель на символ, и я хочу показать целочисленное значение. Тогда верно следующее утверждение:Как выполнить приведение типов?
printf("%d",*(int *)ptr);
Может ли у вас немного объяснить мне?
У меня есть указатель на символ, и я хочу показать целочисленное значение. Тогда верно следующее утверждение:Как выполнить приведение типов?
printf("%d",*(int *)ptr);
Может ли у вас немного объяснить мне?
Если указатель на символ (строка) указывает на действительную C-строку, которая хранит номер в строчном формате, например "123"
, просто используйте спецификатор формата %s
.
printf("%s", ptr);
Формат %d
спецификатор используется для печати номеров, сохраненных в виде двоичных целых чисел типа int
.
Нет, это вообще неправильно, потому что char
составляет всего 1 байт, а int
- это обычно 4 байта. Остальные байты, к которым вы обращаетесь, могут быть недействительными в зависимости от того, на что он указывает, и это может быть неопределенное поведение. Правильный способ сделать это было бы получить значение char
первым, а затем бросить его в int
:
(int)*ptr
Конечно, в этом случае явное приведение может не понадобиться вовсе, так как значение символа будет неявно повышаться до целого числа.
Было бы полезно знать, какой тип переменной ptr был объявлен.
Если было объявлено int * ptr; то потребуется только де-ссылка
т.е. printf ("% d", * ptr);
, потому что PTR имеет тип Int *, а * PTR поэтому типа Int, что соответствует% D
Однако я угадываю PTR была признана недействительной * PTR; в вашем примере, в этом случае , если вы знаете, что это на самом деле указывает на int, тогда отбрасывание из общего указателя типа int * является правильным, а затем де-ссылкой.
ie. printf ("% d", * (int *) ptr);
Целое значение чего? Из первого персонажа? Что он содержит в виде строки? –
Откуда это целочисленное значение? Строка должна содержать целое число, т. Е. Строку «12»? Или вам нужны значения ASCII в строке? Или что? –
Вы изучили api atoi(). Который преобразует строку в целое напрямую – Alam