Reputation: 12632
Sample code:
int ar[3];
............
ar[0] = 123;
ar[1] = 456;
ar[2] = 789;
Is there any way to init it shorter? Something like:
int ar[3];
............
ar[] = { 123, 456, 789 };
I don't need solution like:
int ar[] = { 123, 456, 789 };
Definition and initialization must be separate.
Upvotes: 3
Views: 1787
Reputation:
#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;
}
Upvotes: 0
Reputation: 91
What about the C99 array initialization?
int array[] = {
[0] = 5, // array[0] = 5
[3] = 8, // array[3] = 8
[255] = 9, // array[255] = 9
};
Upvotes: 0
Reputation: 208363
What you are asking for cannot be done directly. There are, however different things that you can do there, starting from creation of a local array initialized with the aggregate initialization and then memcpy
-ed over your array (valid only for POD types), or using higher level libraries like 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
I don't have time to check how to do this with boost::assign
, as I hardly ever work with raw arrays.
Upvotes: 5
Reputation: 3915
int a[] = {1,2,3};
this doesn't work for you?
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)));
}
prints:
1 3 2
Size: 3
Upvotes: 0
Reputation: 70148
Arrays can be assigned directly:
int a[3] = {1, 2, 3};
Check the C++ Arrays tutorial, too.
Upvotes: 0