我在C ++中有以下疑问。 我们知道我们可以在声明时初始化指针,如下所示:
int *p = new int(8)
cout<<*p<<endl;
这将产生8的输出。类似地,如果我们声明一个指向整数数组的指针:
int *p = new int[10];
这可以初始化为:
p[0] = 7
p[1] = 9;
但有没有办法在声明点初始化?
答案 0 :(得分:3)
使用c ++ 11可以使用大括号初始化:
int *p = new int[10] { 7, 9 }; // And so on for additional values past the first 2 elements
答案 1 :(得分:1)
Yo可以使用“{}”,如下所示:
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的解决方案。
答案 2 :(得分:0)
是的,例如,如果你想将数组初始化为1,2,3,4,你可以写:
int [] myarray = {1,2,3,4}
答案 3 :(得分:0)
是的,你可以这样做
int *p = new int[3] {4,5,6};
答案 4 :(得分:0)
正如其他人所说,您可以使用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;
}