int可以在C中存储字符串的基址吗?

kri*_*ant 0 c pointers

为什么代码运行没有错误?

#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*'

Fat*_*ror 6

不,你不能一般地假设这一点.在某种程度上,这是因为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)