我有一个字符指针,我想显示一个整数值。那么以下陈述是正确的:
printf("%d",*(int *)ptr);
你可以解释一下吗?
答案 0 :(得分:2)
如果字符指针(字符串)指向以字符串格式存储数字的有效C字符串,例如"123"
,则只需使用%s
格式说明符。
printf("%s", ptr);
%d
格式说明符用于打印存储为int
类型的二进制有符号整数的数字。
答案 1 :(得分:0)
不,这通常是错误的,因为char
只有1个字节,而int
通常是4个字节。您访问的其余字节可能无效,具体取决于它指向的内容,这可能是未定义的行为。正确的方法是首先获取char
值,然后将其转换为int
:
(int)*ptr
当然,在这种情况下,可能根本不需要显式转换,因为字符值将隐式地提升为整数。
答案 2 :(得分:0)
知道变量ptr被声明为什么类型会很有帮助。
如果声明为int * ptr;那么只需要去引用
即。 printf("%d",* ptr);
因为ptr的类型为int *,因此* ptr的类型为int,匹配%d
但是,我猜ptr被宣布为void * ptr;在你的例子中,在这种情况下 如果你知道它实际指向一个int,那么从通用指针转换 type to int *在取消引用之前是正确的。
即。 printf("%d",*(int *)ptr);