c – 静态和动态数组之间的差异
发布时间:2020-12-16 10:31:50 所属栏目:百科 来源:网络整理
导读:朋友我刚刚玩了一些指针程序,并意识到GCC(可能是C标准)区分静态和动态数组. 动态数组具有用于数组中元素地址的占位符,而对于静态数组,没有存储器位置,其中编译器存储元素数组的起始地址. 我有一个示例程序来证明我的困惑. #include iostream#int main(void){
朋友我刚刚玩了一些指针程序,并意识到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没有多大意义.但那么它的使用不应该被报告为错误吗? 有人可以帮我解决这个困惑吗? 解决方法
实际上_static和& _static没有引用相同的位置.它们出现的唯一原因是因为你在一个上下文中使用_static,它会衰变成一个指针.也就是说,通过您使用它们的方式,您可以将它们引用到相同的位置.但他们之前没有这样做 – 一个是数组而另一个是指针.它们不可能是相同的,因为它们是根本不同的东西.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |