【问题标题】:Initialization for pointer to an integer array初始化指向整数数组的指针
【发布时间】:2026-02-25 07:40:02
【问题描述】:

我对C++有以下疑惑。 我们知道可以在声明的时候初始化指针如下:

int *p = new int(8)
cout<<*p<<endl;

这将产生输出为 8。类似地,如果我们声明一个指向整数数组的指针:

int *p = new int[10];

这可以初始化为:

p[0] = 7
p[1] = 9;

但是有什么方法可以在声明的时候进行初始化吗?

【问题讨论】:

    标签: c++


    【解决方案1】:

    使用c++11可以使用大括号初始化:

    int *p = new int[10] { 7, 9 };  // And so on for additional values past the first 2 elements
    

    【讨论】:

      【解决方案2】:

      你可以按如下方式使用“{}”:

      int main()
      {
         int *p = new int[10]{1,2,3,4,5,6,7,8,9,10};
      
         cout << p[7] << endl;
         return 0;
      }
      

      输出为 8,对应数组的位置 7。

      注意:这是一个基于 c++11 的解决方案。

      【讨论】:

        【解决方案3】:

        是的,例如,如果您想将数组初始化为 1,2,3,4,您可以编写:
        int[] myarray = {1,2,3,4}

        【讨论】:

        • 没关系,除非你想用new分配数组。
        【解决方案4】:

        是的,你可以这样做

        int *p = new int[3] {4,5,6};
        

        【讨论】:

          【解决方案5】:

          正如其他人所说,您可以使用 C++11 列表初始化{}

          或者您可以重载new [] 并使用数组进行初始化,如下所示:

          #include <iostream> 
          
          void* operator new[](std::size_t sz, int *arr)
          {
              void* p = operator new[](sz);
              int *ptr= (int *)p;
              std::size_t i=0;
          
              for(;i<sz;++i)
          
                 ptr[i] = arr[i];
          
              return p;
          }
          
          int main()
          {
          
              int arr[] ={1,2,3,4,5,6,7,8};
              int* p = new( arr) int[8];
          
              for(int i=0;i<8;i++)
               std::cout<<p[i] << std::endl;
          
              delete[] p;
          }
          

          【讨论】: