【问题标题】:C++ Initialize array pointerC++初始化数组指针
【发布时间】:2011-06-17 13:18:45
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 您想要一个指向文字数组的指针,还是要将文字数组的内容分配(即复制)到动态数组?

标签: c++ arrays pointers


【解决方案1】:

您不能以这种方式初始化动态分配的数组。您也不能以这种方式 assign 给数组(动态或静态)。该语法仅在初始化静态数组时有效,即

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

我的意思是,即使以下内容也是非法的:

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

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

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

您可以通过使用 stl 算法来避免显式循环,但想法是一样的

其中一些在 C++0x 中可能已经合法,我不确定。

【讨论】:

  • 你不需要用 4 个元素初始化一个,它会自动初始化。
  • @RamonBoza:它会“自动初始化”为 0,这并不总是人们想要的
  • @RamonBoza...啊,你的意思是我不需要指定4...是的,我知道,那又怎样? :)
【解决方案2】:

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

但是调用 grid an (int*) 是不正确的。

【讨论】:

  • 进一步注意以下几点:char s = "Hello World" 和 char s[] = "Hello World" 完全是两个不同的东西。在第一种情况下,s 是 char 类型,因此是一个指针,它指向保存“hello word”的只读内存位置,但在第二种情况下,s 是一个 char 数组并保存包含此数组的第一个内存位置。
【解决方案3】:

我不确定这是否显而易见,但您可以在一行中完成。

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

由于这是我们所说的 C++,您也可以将其拆分为 两个文件。您的.h 文件包含:

int *grid;

您的.cpp 文件包含:

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

【讨论】:

  • 这对我不起作用。我收到错误“预期';'在声明结束时”。它期望;在新的 int[3] 之后,所以它不接受值初始化
【解决方案4】:

使用下面的代码,grid是一个指针,grid[]是那个指针的一个元素。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2010-10-11
    • 1970-01-01
    相关资源
    最近更新 更多