根据下面的示例,将数组声明为array [n]或指针数组*时有什么区别?我想,例如,'a'和'c'指向数组的第一个元素,但它们表现不同。
#include <iostream>
int main() {
int a[3] = {1};
int b[5];
std::cout << *a << std::endl; //prints 1 - ok
//a = b; //error during compilation
int* c = new int[3];
c[0] = 2;
int* d = new int[5];
std::cout << *c << std::endl; //prints 2 - ok
c = d; //works ok!
return 0;
}
答案 0 :(得分:5)
长话短说 - 它们本质上是一样的,但却略有不同。
从我从http://c-faq.com/aryptr/aryptr2.html收集到的内容,虽然它们都可以作为指向数组前面的指针,当你将数组声明为
时int a[3];
你基本上将'3'的大小绑定到你的变量a,以及它是一个数组。因此,当您尝试将大小为5的b分配给a时,会出现编译错误。
相反,当你写
int * a;
你只是在说'这是一个可能指向数组的指针',对大小没有承诺。
微妙,不是吗?
答案 1 :(得分:0)
以下两行之间的区别:
int g[10];
和
int* h = new int[10];
是第二个是动态分配的,而第一个是静态分配的。
在大多数情况下,它们是相同的,但 在记忆中它们最终生活是不同的。