C++ C/C++;数组分配

C++ C/C++;数组分配,c++,c,arrays,initialization,variable-assignment,C++,C,Arrays,Initialization,Variable Assignment,示例代码: int ar[3]; ............ ar[0] = 123; ar[1] = 456; ar[2] = 789; 有没有办法把它缩短?比如: int ar[3]; ............ ar[] = { 123, 456, 789 }; 我不需要像这样的解决方案: int ar[] = { 123, 456, 789 }; 定义和初始化必须分开。可以直接分配数组: int a[3] = {1, 2, 3}; 也要检查这个参数。inta[]={1,2,3} 这不

示例代码:

int ar[3];
............
ar[0] = 123;
ar[1] = 456;
ar[2] = 789;
有没有办法把它缩短?比如:

int ar[3];
............
ar[] = { 123, 456, 789 };
我不需要像这样的解决方案:

int ar[] = { 123, 456, 789 };

定义和初始化必须分开。

可以直接分配数组:

int a[3] = {1, 2, 3};
也要检查这个参数。

inta[]={1,2,3}

这不适合你

main()
{
    int a[] = {1,3,2};

    printf("%d %d %d\n", a[0], a[1], a[2]);
    printf("Size: %d\n", (sizeof(a) / sizeof(int)));

}
印刷品:

1 3 2
Size: 3

你所要求的不能直接完成。然而,您可以在这里做不同的事情,从创建一个使用聚合初始化初始化的本地数组开始,然后在数组上添加
memcpy
(仅对POD类型有效),或者使用更高级别的库,如
boost::assign

// option1
int array[10];
//... code
{
   int tmp[10] = { 1, 2, 3, 4, 5 }
   memcpy( array, tmp, sizeof array ); // ! beware of both array sizes here!!
}  // end of local scope, tmp should go away and compiler can reclaim stack space
我没有时间检查如何使用
boost::assign
,因为我很少使用原始数组
#include <iostream>

using namespace std;

int main()
{
    int arr[3];
    arr[0] = 123, arr[1] = 345, arr[2] = 567;
    printf("%d,%d,%d", arr[0], arr[1], arr[2]);
    return 0;
}
使用名称空间std; int main() { int-arr[3]; arr[0]=123,arr[1]=345,arr[2]=567; printf(“%d,%d,%d”,arr[0],arr[1],arr[2]); 返回0; }
C99阵列初始化如何

int array[] = {
   [0] = 5, // array[0] = 5
   [3] = 8, // array[3] = 8
   [255] = 9, // array[255] = 9
};

在定义数组之后,我不需要初始化。我需要在代码的更深处初始化数组。@archer:那么为什么不能在需要初始化的点定义它呢?这个点位于循环中。也许我弄错了,但是由于执行了大量的循环,将更加优化以定义这个循环之外的数组。您可以用相同的方式分配它:
a={1,2,3}
。但这实际上是C++0x(“扩展初始值设定项列表”)。如果您需要在每次循环迭代中重新分配数组,您仍然可以使用
memcpy
@archer:那么您几乎肯定是错的。堆栈上的数组分配只需对堆栈指针进行加法/减法运算。编译器可以像任何其他变量一样优化并在函数的堆栈框架中分配它。微软C++(VS2010)。您正在使用定义后的初始化。我需要单独的。
main
没有返回类型!?你在用什么编译器@ybungalobill:gcc 3.3.5但是重点不是主要的,而是数组的使用,只要快速地把它放上去:)谢谢。我只是认为在这种语言或编译器扩展中存在这种情况。感谢您提到这一点,但我们不讨论初始化:)术语:初始化是在定义时给出一个值。您需要的是“数组分配”。