在C中只读字符串

zer*_*d0l 1 c string pointers

在阅读有关"只读"字符串时,遇到了以下代码段.

#include<stdio.h>
main()
{
    char *foo = "some string";
    char *bar = "some string";
    printf("%d %d\n",foo,bar);
}
Run Code Online (Sandbox Code Playgroud)

我所理解的是foo和bar都会打印相同的地址,但我无法理解背景中究竟发生了什么.即当字符串相同时它将返回相同的地址,但是当我修改字符串时,地址是不同的.

Yu *_*Hao 5

在此输入图像描述

foobar两者都将打印相同的地址

实际上,根据标准,它们不需要具有相同的地址,它是未指定的.但实际上,大多数编译器会使相同的字符串文字保持相同的地址.

你不能修改字符串文字,我认为你的意思是你使用不同的字符串文字,在这种情况下,很明显字符串将包含不同的地址.

C11 6.4.5字符串文字

如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的.如果程序试图修改此类数组,则行为未定义.

在此输入图像描述