c - 该程序中的内存是如何分配的?

标签 c arrays string pointers printf

我在 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() 调用现在会打印以下三项内容:

  1. str2 指针变量本身的地址,即 6422300
  2. 代码段中字符数组的地址,由6422300处的指针所指向,即4214884
  3. 位于地址 4214884 的字节,以字符串形式呈现。

关于c - 该程序中的内存是如何分配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59215167/

相关文章:

c - C 中的定义宏实现

c - 如何获得 sscanf_s 在上次操作中读取了多少字节?

java - 查找数组中最低值的索引号

java - 查找连续数组中的第 k 个缺失元素(超出时间限制)

string - Matlab 字符串元胞数组 : finding repeated strings and manipulating corresponding data

java - 如何在 java 中使用特定规则对给定字符串进行子字符串化

java - 一个字符串包含另一个字符串

c - 使用 C 程序在 Linux 中捕获 UDP 数据时接收相同的源地址和目标 IP 地址

c - if 语句不能正常工作?

Javascript 使用数组计算值