gpt4 book ai didi

int可以在C中存储string的基地址吗?

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:04 26 4
gpt4 key购买 nike

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

#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;
}

//ideone.com语言c编译

输出:

字符串

134513984//一些垃圾(“字符串”的地址)

请解释c中的指针是否有一些灵 active 。我在 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 

这也使打印它的值变得复杂,您需要使用宏来实现便携:

printf("%"PRIiPTR,i);

要打印原始字符串,还应该强制转换:

printf("%s", (char *)i);

关于int可以在C中存储string的基地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25317129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com