[英]C memory layout for two dimensional string arrays
我试图弄清楚c中二维数组的内存布局是如何工作的。 特别是字符串数组。 阅读此网站后,我知道它应该如何工作
但是当进行分配时
char *states[] = {
"California", "Oregon",
"Washington", "Texas"
};
行大小是否自动设置为与最长字符串的大小匹配?
我试图使用下面的代码来弄清楚它,但我仍然不明白。
int main(){
char *test[] = {
"0", "12",
"345", "6789"
};
int i = 0;
int j = 0;
for (i=0; i<10; i++){
for (j=0; j<10; j++){
printf("%d,%d: ", i,j);
printf("%c\n", test[i][j]);
}
}
return 0;
}
我觉得所有行的大小都应该相同,但是遍历数组时,下一个字符串似乎在单个空格之后立即开始。
提前致谢!
您实际上没有二维char
数组。 相反,您有一个一维的char
指针数组。 在二维char
数组中,所有字符串都将为其分配完全相同的内存量。 您的案件实际上在许多方面都比较简单。 编译器会创建一堆常量字符串,并使用这些指针初始化char *数组。 每个字符串都有其自己的独立长度。
声明真正的二维char
数组的方法如下:
char states[][11] = {
"California",
"Oregon",
"Washington",
"Texas"
};
此处的字符串长度是明确的(最多10个字符,空字节加1)。 不管是否使用全部字符串,每个字符串都具有完整的字符数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.