关于数组内存

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:22:47
C++程序中定义 char a[] = "123";
char b[] = "123456789";
运行中观察a与b的地址相差4
修改 char a[]="1234";
运行中观察a与b的地址相差8,b的舒适地址没变,a的初始地址比原来小4.
为什么只添加了一个字符,地址相差是8,而不是5啊
我在程序中试了下,如果连续定义两个字符,比如char a ='0';char b ='1';结果a,b的地址就差1。我想是不是定义数组的时候才是按4字节对齐的啊?

定义数组的时候,系统在你的内存里面开辟一段内存空间。至于这个“开辟”是没有规律的。a、b的地址其实是数组首元素的地址。所以地址相差说明不了什么。只是sizeof(b)和sizeof(a)值得注意一下。

因为你的两个数组是在函数中定义的 也就是局部变量
编译器把它分配到程序栈上 紧挨着分配 是有规律的

char a[] = "123";占4字节
char a[]="1234";占5字节

因为数组变量分配是4字节对齐 也就是变量地址必须被4整除

才有了 只添加了一个字符,地址相差是8

char a[] = "123";
char b[] = "123456789";
这样定义变量好像地址没规律

地址都是编译器安排的,那几个字节可能分配给其他变量了,但这并不影响程序的运行。