在以下(合法的)c 代码中,没有显式分配给指针 p 的内存。
AFAIK,如果没有显式分配内存,我无法让 int *p
指向值 5
。
int main()
{
char *p;
p = "Hello";
return 0;
}
char*
指针如何不同 "Hello"
最佳答案
当您在程序中放入诸如“Hello”之类的文字字符串时,编译器会在程序的数据区(称为 Data Segment )中创建一个字符数组。
当您分配:
p="Hello";
编译器获取数据段中字符串文字的地址并将其放入指针变量 p 中。
请注意,字符串文字与数字文字不同。字符串文字的类型是
const char[]
- 您可以将其分配给 char* 指针。整数文字只是类型 int
。另请注意,数字文字不需要存储在数据段中 - 在大多数情况下,此类文字直接放置在机器代码指令中。因此,没有您可以将 p 指向的地址。
如果您尝试这样做(根据您的评论):
int *p;
*p = 5;
你实际上是说你想将数字 5 存储到 p 指向的位置(在这种情况下这将是未定义的,因为我们从未将 p 设置为任何东西)。您可能会遇到段错误。
如果您尝试这样做:
int *p;
p = 5;
您要告诉编译器做的是将值 5 转换为指向整数的指针并将其存储在 p 中,结果指针 p 现在指向地址 5。您可能会收到如下警告:
t.c:7: warning: assignment makes pointer from integer without a cast
换句话说,您正在尝试将整数转换为指针 - 可能不是您认为自己想要做的。
关于c - 内存分配如何在不显式分配的情况下为 char* 工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22242794/