数组作为数组[n]和指针数组*

时间:2011-09-14 13:58:55

标签: c++

根据下面的示例,将数组声明为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;
}

2 个答案:

答案 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];

是第二个是动态分配的,而第一个是静态分配的。

在大多数情况下,它们是相同的,但 在记忆中它们最终生活是不同的。

相关问题