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



当我实现一个指向字符串的指针数组时,我知道字符串文字的字符将存储在连续的内存位置,每个字符串的基地址将存储在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

附言:值得一提的是,我在两个不同的编译器下尝试了您的代码,而这六个字符串实际上是连续存储的。我并不感到惊讶,但如果它们以其他顺序存储,我也不会感到惊讶。

最新更新