5

我想在下面做这样的事情:

int main() {
   int a[10];
   int *d = generateArrayOfSize(10) // This generates an array of size 10 on the heap
   a = d;
   print(a); // Prints the first 10 elements of array.
}

然而,上面的代码给出了编译错误(将 'int*' 分配给 'int [10]' 的类型不兼容)。我该怎么做才能使上述代码正常工作?

4

7 回答 7

4

如果您使用的是 C++,则使用 C++ 数组而不是 C 样式的数组和指针。这是一个例子

#include <array>
#include <iostream>

template<size_t N>
std::array<int, N> generateArrayOfSize(void)
{
    std::array<int, N> a;
    for (int n=0; n<N; ++n)
        a[n] = n;
    return a;
}

template<size_t N>
void print(std::array<int, N> const &a)
{
    for (auto num : a)
        std::cout << num << " ";
}

int main() {
   std::array<int, 10> a;
   std::array<int, 10> d = generateArrayOfSize<10>();
   a = d;
   print(a); // Prints the first 10 elements of array.
}

哪个输出0 1 2 3 4 5 6 7 8 9

于 2013-07-28T13:22:51.680 回答
4

数组是不可赋值且不可复制的,因此您必须手动(在循环中)复制每个元素,或者使用std::copy.

于 2013-07-28T13:06:06.370 回答
3

数组不是指针。

你不能这样做:

int a[10];
int *d;
a = d;

将其更改为:

int *a;
int *d;
a = d;

C编程中数组和指针的主要区别:

Pointer                                    | Array
-------------------------------------------|-------------------------------------------
A pointer is a place in memory that keeps  | An array is a single, pre allocated chunk
address of another place inside            | of contiguous elements (all of the same
                                           | type), fixed in size and location.
-------------------------------------------|-------------------------------------------
A pointer can point to a dynamically       | They are static in nature. Once memory is 
allocated memory. In this case, the memory | allocated , it cannot be resized or freed
allocation can be resized or freed later.  | dynamically.
-------------------------------------------|-------------------------------------------

你在这里有一个很好的解释:https ://stackoverflow.com/a/7725410/1394283

于 2013-07-28T13:05:57.223 回答
2

数组不是指针(尽管数组的名称通常会衰减为指向其第一个元素的指针)。

要使上述代码正常工作,您可以声明a为指针:int *a;. 无论如何,该print函数都需要一个int*(或衰减的数组)。

如果你真的想要有两个数组并将内容从一个数组复制到另一个数组,你应该在一个循环中复制数据。

于 2013-07-28T13:02:59.487 回答
1

当您将字符串引用分配给指针时,这将以这种方式打印,您必须使用 *ptr 来打印指针的值,否则在您的情况下print(d)就像 cout< 在 c++ 中它只会打印d[0]。

 int ary[5]={1,2,3,4,5};
 int *d;
 d=ary;
 for(int i=0;i<5;i++)
 cout<<*(d+i);
于 2014-05-17T01:47:46.640 回答
0

因为数组名称是不可修改的。所以你不能做

a = d;

将其声明为这样的指针:

int *a;
于 2013-07-28T13:02:56.753 回答
0

我的 C++ 有点生疏,但尝试这样的事情。

int main() {
   int *a;
   int *d = generateArrayOfSize(10) // This generates an array of size 10 on the heap
   a = d;
   print(a); // Prints the first 10 elements of array.
}
于 2013-07-28T13:04:49.123 回答