C++初始化数组指针

14

我应该如何将指针初始化为文字数组?
我希望*grid指向新分配的int数组 {1,2,3}。

int *grid = new int[3];
*grid = {1, 2, 3};

谢谢。


4
你是想要一个指向字面数组的指针,还是想要将字面数组的内容赋值(即复制)到动态数组中? - Oliver Charlesworth
4个回答

10

你不能以这种方式初始化动态分配的数组。也不能以这种方式赋值给一个数组(动态或静态)。这种语法只在初始化静态数组时有效,即:

int a[4] = {2, 5, 6, 4};

我的意思是,即使是下面这个也是不合法的:

int a[4];
a = {1, 2, 3, 4}; //Error

在您的情况下,您只能手动复制每个元素的值。

for (int i = 1; i<=size; ++i)
{
    grid[i-1] = i;
}

你可以使用STL算法来避免显式循环,但思路是相同的。

在C++0x中,这些内容可能已经合法了,我不确定。


你不需要初始化a为4个元素,它会自动初始化。 - RamonBoza
@RamonBoza:它将“autoInit”为0,这并不总是人们想要的。 - Armen Tsirunyan
@RamonBoza... 哦,你的意思是我不需要指定 4 ... 是啊,我知道,那又怎样? :) - Armen Tsirunyan

1

@above的grid指向数组grid[]的第一个元素存储的地址位置。由于在C++中,数组是存储在连续的内存位置上的,因此您可以通过递增grid并取消引用它来遍历数组。

但是将grid称为(int*)是不正确的。


请注意以下内容:char s = "Hello World" 和 char s[] = "Hello World" 是两个完全不同的东西。在第一种情况下,s 的类型是 char,因此是一个指针,并且它指向包含 "hello word" 的只读内存位置,但在第二种情况下,s 是一个 char 数组,并且保存了包含该数组的第一个内存位置的地址。 - Amm Sokun

0

我不确定这是否显而易见,但你可以在一行代码中完成这个任务。

int *grid = new int[3] {1, 2, 3};

既然我们谈论的是C++,你也可以将其拆分为两个文件。其中你的.h文件包含:

int *grid;

而你的.cpp文件包含:

grid = new int[3] {1, 2, 3};

这对我不起作用。我收到了“在声明结尾处预期';'”的错误。它在new int [3]之后期望;,因此它不接受值初始化。 - mvoelcker

-5
使用以下代码,grid是一个指针,grid[]是该指针的一个元素。
int grid[] = {1 , 2 , 3};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接