我有一些关于字符串文字的基本问题。我尝试过一些类似的问题,但我仍然没有得到它:(。
如果我们有以下程序:
char firstlit[] = "First Literal";
int main()
{
char secondlit[] = "Second Literal";
}
以这种方式初始化的字符串是文字吗?如果是这样,我们怎么能修改它们的价值呢?是否未定义改变其价值观?
它们都存储在数据部分吗?我在某处看到某些数据可以保存在代码段中,为什么会这样?
它们之间的唯一区别是secondlit包含指向字符串初始化的地址的指针,但是我们只能在main中使用这个变量,而firstlit我们可以在整个文件中使用(全局)? 另一个问题:
char *ptr = "Hello";
char secondptr[] = "Hello";
它们的存储方式实际上是否相同?用于字符串文字的更好方法是什么? 很抱歉这么多问题。 感谢。
答案 0 :(得分:3)
firstlit和secondlit都不是文字。它们都是初始化的字符数组。 firstlit在任何函数体之外声明,因此存在于数据段中。它在开始时初始化一次。 secondlit在函数内声明,因此位于堆栈段中。输入功能时会初始化它。
答案 1 :(得分:3)
您的问题中只有一个字符串 - 文字对象:
char *ptr = "Hello"; // The array containing Hello\0
所有其他只是数组的初始值设定项,并且无法保证它们是如何存储的。
char[]
。