c++ - 在连续的内存位置存储字符串文字

标签 c++ c arrays string pointers

    #include <stdio.h>
    #include <string.h>
    int main() {

    char *s[] = {"cricket","tennis","football"};

    printf(" String are: \n\n");
    printf("  %s \n", *(s));
    printf("  %s \n", *(s+1));
    printf("  %s \n", *(s+2));
    printf("  \n\n");

    printf("  Starting locations of the string are: \n\n");

    printf("  %d\n",*(s));
    printf("  %d\n",*(s+1));
    printf("  %d\n",*(s+2));
    printf("  \n\n");

    return 0;
}

输出:

String are: 

cricket 
tennis 
football 


Starting locations of the string are: 

134514112
134514120
134514127

s 是一个字符指针数组。 s 有三个元素,每个元素都存储字符串文字的起始地址。即s[0]是一个指针,指向“蟋蟀”的起始地址。等..

我的问题是:

通过观察这些地址,我们可以看到第二个字符串存储在第一个字符串的空字符之后。所有三个字符串都以顺序形式存储。这总是正确的吗?

最佳答案

这是一个链接器决定 - 是否紧密存储字符串文字。没有任何保证。或者甚至这可能由编译器完成——它可能会创建包含所有相关文字的连续数据部分。但是尽管如此,该部分的实际布局仍然是特定于实现的,您不应该对此做出任何假设。

关于c++ - 在连续的内存位置存储字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38997119/

相关文章:

c++ - C++ std::string 堆内存分配的保证?

c - Windows API 使用

python - 在python中循环包含数组的链表

arrays - VB.NET数组参数机制,byval和byref

c++ - 全局变量可以在C++的各个类中访问和修改吗

c++ - for_each 和转换

C++:创建迭代器嵌套类的实例

c - 将条件语句定义为变量

c++ - 程序地址范围

c - 函数返回意外值