我在 C 中摆弄指针,遇到了这样的事情
#include <stdio.h>
int main() {
char *str2 = "Heyya";
printf("%d %d %s\n", &str2, str2, str2);
return 0;
}
程序成功运行并给出输出
6422300 4214884 嘿亚
我不明白的是,程序如何在 printf 函数中的第二个“str2”(将值赋给 %s 的那个)中不使用 * 运算符来打印“Heyya”
PS,当我使用 *str2 运行相同的操作时,它会出现段错误
谁能解释一下内存中发生了什么?
最佳答案
str2
是一个指向字符数组的指针,它是位于代码段中的文字常量。它不是“分配”的。它只是程序目标代码的一部分。
您的 printf()
调用现在会打印以下三项内容:
str2
指针变量本身的地址,即6422300
。- 代码段中字符数组的地址,由
6422300
处的指针所指向,即4214884
。 - 位于地址
4214884
的字节,以字符串形式呈现。
关于c - 该程序中的内存是如何分配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215167/