为什么代码运行没有错误?
#include <stdio.h>
int main() {
int i="string"; //the base of string can be stored in a character pointer
printf("%s\n",i);
printf("%d",i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
//在ideone.com语言上编译c
OUTPUT:
串
134513984 //一些垃圾("string"的地址)
请解释c中指针是否有一定的灵活性.我为c ++尝试了它,它给出了错误:在初始化时无法将'const char*'转换为'int*'
不,你不能一般地假设这一点.在某种程度上,这是因为int可能没有的尺寸相同char *(实际上,在许多的64位的编译器将不具有相同的尺寸).
如果要将指针存储为整数,则实际使用的相应类型intptr_t来自<stdint.h>.这是一个保证能够保存指针值的整数.
但是,您实际上想要这样做的情况有点罕见,当您这样做时,您还应该包含一个显式的强制转换:
intptr_t i=(intptr_t)"string"; //the base of string can be stored in a character pointer
Run Code Online (Sandbox Code Playgroud)
这也使打印它的价值变得复杂,你需要使用宏来便携:
printf("%"PRIiPTR,i);
Run Code Online (Sandbox Code Playgroud)
要打印原始字符串,您还应该强制转换:
printf("%s", (char *)i);
Run Code Online (Sandbox Code Playgroud)