朋友们,我只是在玩一些指针程序,并意识到 GCC(也许还有 C 标准)区分了静态和动态数组。
动态数组有一个用于数组中元素地址的占位符,而对于静态数组,没有编译器存储元素数组起始地址的内存位置。
我有一个示例程序来证明我的困惑。
#include <iostream>
#int main(void)
{
int _static[10];
int *_dynamic;
_dynamic = new int [10];
std::cout<<"_static="<<_static<<" &_static="<<&_static<<" &_static[0]="<<&_static[0]<<std::endl;
std::cout<<"_dynamic="<<_dynamic<<" &_dynamic="<<&_dynamic<<" &_dynamic[0]="<<&_dynamic[0]<<std::endl;
return 0;
}
对于上述程序,_static
并&_static[0]
在预期的行上返回相同的地址。但是,它&_static
也返回与其他两个相同的地址。
所以,_static
并&_static
引用相同的数字(或地址我们想称呼它的任何东西)。正如预期的那样,_dynamic
并&_dynamic
指示不同的位置。
那么,为什么 C 标准这么说_static
并且&_static
必须引用相同的位置。听起来很混乱。我觉得的一个原因是这&_static
没有多大意义。但是,它的用法不应该被报告为错误吗?
有人可以帮我解决这个困惑吗?