c - 在指向字符串的指针数组中,所有字符串是否都存储在连续的内存位置?

标签 c arrays string pointers memory

当我实现一个指向字符串的指针数组时,我知道字符串文字的字符将存储在连续的内存位置,每个字符串的基地址将存储在 char 指针中,这些指针本身也将是存储在连续的内存位置,但字符串是否也存储在连续的内存位置,如果是,请解释正确的原因。例如 - 如果字符串“akshay”的基地址是 182,那么下一个字符串“parag”的基地址将是 189,如果是,为什么会这样

char *names[]={ 
                "akshay",
                "parag",
                "raman",
                "srinivas"
                "gopal",
                "rajesh"
              };

最佳答案

没有。

给定你的代码

char *names[]={ 
    "akshay",
    "parag",
    "raman",
    "srinivas",
    "gopal",
    "rajesh"
};

没有特别的理由期望字符串本身以任何特定的相互关系存储。

一种可能的安排可能是

names: 0x1002030: 0x100204c
       0x1002034: 0x100205a
       0x1002038: 0x100206c
       0x100203c: 0x1002073
       0x1002040: 0x1002054
       0x1002044: 0x1002060
       0x1002048:
       0x100204c: aksh
       0x1002050: ay
       0x1002054: gopa
       0x1002058: l pa
       0x100205c: rag
       0x1002060: raje
       0x1002064: sh
       0x1002068:
       0x100206c: rama
       0x1002070: n  s
       0x1002074: rini
       0x1002078: vas

附言对于它的值(value),我在两个不同的编译器下尝试了您的代码,并且六个字符串 事实上是连续存储的。我并不感到惊讶,但如果它们以其他顺序存储,我也不会感到惊讶。

关于c - 在指向字符串的指针数组中,所有字符串是否都存储在连续的内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697188/

相关文章:

java - 如何从文件导入和操作字符串

java - 试图在 java 中将 char 数组作为参数传递并出现索引错误

javascript - 从字符串jquery中删除字符串

c++ - 只读取文本文件中的给定行?

c - 我无法正确接受用户的输入

c - 在 C 中实现互斥锁

c - gcc 自动更正 printf 中的格式

php - 在 php 中,使用连接运算符 (.) 向数组添加值的目的是什么?

javascript - 使用 AngularJS 中的多个输入字段编辑分隔字符串

c - C 中的牌组洗牌可以编译,但会出现段错误