473,320 Members | 1,914 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

Array initialisation

HI

Would i be able to initialize an entire array by:-

int a[10] = 0

if not, how old be able to do it, would i have to use some form of loop
to set each individual element?

Dan

Jul 19 '05 #1
16 10685
John Dibling wrote:
On Mon, 04 Aug 2003 19:15:59 +0100, Danny <da***********@ntlworld.com>
wrote:

HI

Would i be able to initialize an entire array by:-

int a[10] = 0

if not, how old be able to do it, would i have to use some form of loop
to set each individual element?

Dan

The code you have above will initialize the first element; all others
will be uninitialized (eg, garbage). You can do this:

int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


int a[10] = {0};

would be sufficient.

or use a loop as you suggested.


HTH,
--ag
--
Artie Gold -- Austin, Texas

Jul 19 '05 #2
Danny wrote in news:3F**************@ntlworld.com:
HI

Would i be able to initialize an entire array by:-

int a[10] = 0
int a[10] = {};

if not, how old be able to do it, would i have to use some form of loop
to set each individual element?


The above initializer causes all of a's elements to be default
initialized, in the case of an int this means 0, so you get what
you want.

Note that:

int b[3] = { 1 };
is the same as
int b[3] = { 1, 0, 0 };

HTH

Rob.
--
http://www.victim-prime.dsl.pipex.com/
Jul 19 '05 #3
Artie Gold wrote:
...
The code you have above will initialize the first element; all others
will be uninitialized (eg, garbage). You can do this:

int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


int a[10] = {0};

would be sufficient.
...


As Rob noted in his message, even

int a[10] = {};

would be sufficient.

--
Best regards,
Andrey Tarasevich
Brainbench C and C++ Programming MVP

Jul 19 '05 #4
On Mon, 04 Aug 2003 13:27:41 -0700, Andrey Tarasevich
<an**************@hotmail.com> wrote:
Artie Gold wrote:
...
The code you have above will initialize the first element; all others
will be uninitialized (eg, garbage). You can do this:

int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


int a[10] = {0};

would be sufficient.
...


As Rob noted in his message, even

int a[10] = {};

would be sufficient.


I don't think that's correct...

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."

Doesn't this mean anything not explicitly initialized would be
uninitialized in this case?
</dib>
John Dibling
Witty banter omitted for your protection
Jul 19 '05 #5
"John Dibling" <dib@substitute_my_full_last_name_here.com> wrote...
On Mon, 04 Aug 2003 13:27:41 -0700, Andrey Tarasevich
<an**************@hotmail.com> wrote:
Artie Gold wrote:
...
The code you have above will initialize the first element; all others
will be uninitialized (eg, garbage). You can do this:

int a[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

int a[10] = {0};

would be sufficient.
...


As Rob noted in his message, even

int a[10] = {};

would be sufficient.


I don't think that's correct...

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."

Doesn't this mean anything not explicitly initialized would be
uninitialized in this case?


Just scroll a few paragraphs back and read 8.5/5. For a POD to
default-initialise means to zero-initialise. 'int' is a POD.

Victor
Jul 19 '05 #6
John Dibling wrote:
...
As Rob noted in his message, even

int a[10] = {};

would be sufficient.
I don't think that's correct...

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."


Actually, the above is exactly what makes the '{}' initializer
sufficient in this case. I don't see what in this quote makes you think
that the initialization is incorrect.
Doesn't this mean anything not explicitly initialized would be
uninitialized in this case?


No, it means exactly what it says: everything not explicitly initialized
will be _default_ _initialized_. Default initialization for 'int's means
zero initialization. See a reference in Victor's message. Take a look at
8.5.1/8 as well.

--
Best regards,
Andrey Tarasevich
Brainbench C and C++ Programming MVP

Jul 19 '05 #7
> >> ...
As Rob noted in his message, even

int a[10] = {};

would be sufficient.


I don't think that's correct...

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."


Actually, the above is exactly what makes the '{}' initializer
sufficient in this case. I don't see what in this quote makes you think
that the initialization is incorrect.
Doesn't this mean anything not explicitly initialized would be
uninitialized in this case?


No, it means exactly what it says: everything not explicitly initialized
will be _default_ _initialized_. Default initialization for 'int's means
zero initialization. See a reference in Victor's message. Take a look at
8.5.1/8 as well.


I noted your quote on a paragraph from some source:

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."

which I assume to be some online C++ reference. Where can I view this for
myself?
Regards
WD
Jul 19 '05 #8

"Web Developer" <no****@hotmail.com> wrote in message
news:3f********@news.iprimus.com.au...
> ...
>As Rob noted in his message, even
>
> int a[10] = {};
>
>would be sufficient.

I don't think that's correct...

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."


Actually, the above is exactly what makes the '{}' initializer
sufficient in this case. I don't see what in this quote makes you think
that the initialization is incorrect.
Doesn't this mean anything not explicitly initialized would be
uninitialized in this case?


No, it means exactly what it says: everything not explicitly initialized
will be _default_ _initialized_. Default initialization for 'int's means
zero initialization. See a reference in Victor's message. Take a look at
8.5.1/8 as well.


I noted your quote on a paragraph from some source:

8.5.1.7 :

"If there are fewer initializers in the list than there are memvers in
the aggregate, then each member not explicitly initialized shall be
default initialized."

which I assume to be some online C++ reference. Where can I view this for
myself?

The C++ standard.
http://www.zib.de/benger/C++/clause8.html#s8
Jul 19 '05 #9
Rob Williscroft <rt*@freenet.REMOVE.co.uk> wrote in message news:<Xn**********************************@195.129 .110.130>...
Danny wrote in news:3F**************@ntlworld.com:
HI

Would i be able to initialize an entire array by:-

int a[10] = 0


int a[10] = {};


Thanks for the tip...I'd been using a bunch of loops to accomplish
same.

One question. If I have an array as part of a class, initializing to
zero using empty braces doesn't work. eg

class arrayholder{
int a[100] = {};
};

doesn't work. I have to use:

class arrayholder{
int a[100];
};

arrayholder::arrayholder(){
for(int i = 0; i<100; i++)
a[i] = 0;
}

and initialize it in the constructor. However, I'd like to do
something like:
a[] = {};

in the constructor. any ideas?
Thanks
Jul 19 '05 #10
On Tue, 5 Aug 2003 19:48:17 +0930, "Web Developer"
<no****@hotmail.com> wrote:

which I assume to be some online C++ reference. Where can I view this for
myself?
Regards
WD


This is a reference to the ISO C++ standard document, which describes
the language in detail. AFAIK, there is no onlne location to view
this document; it is copyrighted material, and you must purchase a
copy. Here's one place where you can get one:

http://webstore.ansi.org/ansidocstor...C+14882%2D1998

</dib>
John Dibling
Witty banter omitted for your protection
Jul 19 '05 #11
"J. Campbell" <ma**********@yahoo.com> wrote...
Rob Williscroft <rt*@freenet.REMOVE.co.uk> wrote in message news:<Xn**********************************@195.129 .110.130>...
Danny wrote in news:3F**************@ntlworld.com:
HI

Would i be able to initialize an entire array by:-

int a[10] = 0


int a[10] = {};


Thanks for the tip...I'd been using a bunch of loops to accomplish
same.

One question. If I have an array as part of a class, initializing to
zero using empty braces doesn't work. eg

class arrayholder{
int a[100] = {};
};

doesn't work.


Of course it doesn't. You're not in Java any more. The class
definition can contain only _declarations_ of data members, with
a simple exception: a static const of integral type is allowed
to be initialised there.
I have to use:

class arrayholder{
int a[100];
};

arrayholder::arrayholder(){
for(int i = 0; i<100; i++)
a[i] = 0;
}

and initialize it in the constructor. However, I'd like to do
something like:
a[] = {};

in the constructor. any ideas?


Nope. That's the limitation of the language.

Victor
Jul 19 '05 #12
J. Campbell wrote:
<snip>
One question. If I have an array as part of a class, initializing to
zero using empty braces doesn't work. eg
<snip> However, I'd like to do
something like:
a[] = {};

in the constructor. any ideas?


Perhaps you should consider using a vector, for this and many other
reasons. (See the FAQ for comp.lang.c++ for more reasons.)

In your particular case, your code could look like this:

#include <vector>

class ArrayHolder
{
public:
ArrayHolder()
: d_v(10, 0)
{ /* no code needed for vector initialization */ }
private:
std::vector<int> d_v;
};

The vector constructor I used above will initialize the vector with 10 '0's.

I understand that you need to know how arrays work in C++, as you need
to understand the basics. However, STL containers are usually a better
choice than arrays in C++.

- Adam

Jul 19 '05 #13
J. Campbell wrote in
news:b9**************************@posting.google.c om:
Rob Williscroft <rt*@freenet.REMOVE.co.uk> wrote in message
news:<Xn**********************************@195.129 .110.130>...
Danny wrote in news:3F**************@ntlworld.com:
> HI
>
> Would i be able to initialize an entire array by:-
>
> int a[10] = 0


int a[10] = {};


Thanks for the tip...I'd been using a bunch of loops to accomplish
same.

One question. If I have an array as part of a class, initializing to
zero using empty braces doesn't work. eg

class arrayholder{
int a[100] = {};
};

doesn't work. I have to use:

class arrayholder{
int a[100];
};

arrayholder::arrayholder(){
for(int i = 0; i<100; i++)
a[i] = 0;
}

and initialize it in the constructor. However, I'd like to do
something like:
a[] = {};

struct arrayHolderBase
{
int a[100];
};

class arrayHolder: arrayHolderBase
{

public:

arrayHolder() : arrayHolderBase() {}
};
The important part of the above is: "... : arrayHolderBase() { ..."
bit. This explicit call of the POD's (arrayHolderBase's) default
constructor causes the arrayHolderBase sub object of arrayHolder
to be defualt initialized (all fields/elements set to 0).

Just for fun I compiled the following:

#include <iostream>

struct arrayHolder
{
char a[100];
arrayHolder() : a() {}
};

void test()
{
arrayHolder a;

for (int i = 0; i < 100; ++i)
{
if (a.a[i])
{
std::cerr << "non 0 at " << i << "\n";
return;
}
}
}

void set()
{
arrayHolder a;

for (int i = 0; i < 100; ++i)
{
a.a[i] = i + 20;
}
}

int main()
{
set();
test();
std::cerr << "OK";
}

I fouund the results a bit suprising, No Errors/Warning's
(aka diagnostics) with any of the 3 compilers I tried.

g++ (gcc 3.2 MingW) : OK
msvc (7.1) : non 0 at 0 - OK
bcc32 (borland): non 0 at 0 - OK

I was really expecting (hopeing for) a diagnostic, BTW I used
-W -Wall -pedantic with g++.

I suspect all 3 compilers are conforming implementation's (in this
regard) of our beloved C++ Standard.

Rob.
--
http://www.victim-prime.dsl.pipex.com/
Jul 19 '05 #14
Rob Williscroft wrote:
...
struct arrayHolderBase
{
int a[100];
};

class arrayHolder: arrayHolderBase
{

public:

arrayHolder() : arrayHolderBase() {}
};
The important part of the above is: "... : arrayHolderBase() { ..."
bit. This explicit call of the POD's (arrayHolderBase's) default
constructor causes the arrayHolderBase sub object of arrayHolder
to be defualt initialized (all fields/elements set to 0).
Strictly speaking, in standard terminology the '... : arrayHolderBase()
{ ...' bit is not and explicit call to 'arrayHolderBase' constructor.
The '()' is just a form of member initializer which causes this member
to be default-initialized. No constructors are involved in this process.
Just for fun I compiled the following:

#include <iostream>

struct arrayHolder
{
char a[100];
arrayHolder() : a() {}
};

void test()
{
arrayHolder a;

for (int i = 0; i < 100; ++i)
{
if (a.a[i])
{
std::cerr << "non 0 at " << i << "\n";
return;
}
}
}

void set()
{
arrayHolder a;

for (int i = 0; i < 100; ++i)
{
a.a[i] = i + 20;
}
}

int main()
{
set();
test();
std::cerr << "OK";
}

I fouund the results a bit suprising, No Errors/Warning's
(aka diagnostics) with any of the 3 compilers I tried.
There shouldn't be any. The code is legal.
g++ (gcc 3.2 MingW) : OK
msvc (7.1) : non 0 at 0 - OK
bcc32 (borland): non 0 at 0 - OK

I was really expecting (hopeing for) a diagnostic, BTW I used
-W -Wall -pedantic with g++.

I suspect all 3 compilers are conforming implementation's (in this
regard) of our beloved C++ Standard.


No. Looks like only 'g++' was able to produce the correct result. The
'msvc' and 'bcc32' are not conforming in this respect. As for 'msvc',
this problem existed in version 6 as well.

--
Best regards,
Andrey Tarasevich
Brainbench C and C++ Programming MVP

Jul 19 '05 #15
Andrey Tarasevich wrote in news:3F**************@hotmail.com:
struct arrayHolder
{
char a[100];
arrayHolder() : a() {}
};


I fouund the results a bit suprising, No Errors/Warning's
(aka diagnostics) with any of the 3 compilers I tried.


There shouldn't be any. The code is legal.
g++ (gcc 3.2 MingW) : OK
msvc (7.1) : non 0 at 0 - OK
bcc32 (borland): non 0 at 0 - OK

I was really expecting (hopeing for) a diagnostic, BTW I used
-W -Wall -pedantic with g++.

I suspect all 3 compilers are conforming implementation's (in this
regard) of our beloved C++ Standard.


No. Looks like only 'g++' was able to produce the correct result. The
'msvc' and 'bcc32' are not conforming in this respect. As for 'msvc',
this problem existed in version 6 as well.


Thanks for the correction.

Rob.
--
http://www.victim-prime.dsl.pipex.com/
Jul 19 '05 #16
> > which I assume to be some online C++ reference. Where can I view this
for
myself?
Regards
WD


This is a reference to the ISO C++ standard document, which describes
the language in detail. AFAIK, there is no onlne location to view
this document; it is copyrighted material, and you must purchase a
copy. Here's one place where you can get one:

http://webstore.ansi.org/ansidocstor...FISO%2FIEC+148
82%2D1998

What is the latest version for this document? version 1.0?
WD

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.504 / Virus Database: 302 - Release Date: 24/07/2003
Jul 19 '05 #17

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

7
by: Christopher Jeris | last post by:
I am relatively new to JavaScript, though not to programming, and I'm having trouble finding the idiomatic JS solution to the following problem. I have a table with (say) fields f1, f2, f3. I...
2
by: Remi Bastide | last post by:
Is is possible to initialize a javascript associative array inline, as you would do in PHP, e.g. : <?php $a = array("abc" => "def", "ghi" => "jkl"); ?>
7
by: Michael | last post by:
Hi all, I have got a simple question about the #define command: Can I use it for array initialisation? E.g. #define ARRAYINIT { {0, 1}, {2,3} }
7
by: Frank M. | last post by:
I'm trying to declare an array of pointers to structures so that I can make the last element a NULL pointer. I figure that it would more easily allow my library routines to know when to stop...
18
by: Vasileios Zografos | last post by:
Hello, can anyone please tell me if there is any difference between the two: double Array1; and
3
by: Louis Caron | last post by:
I am facing the following problem: - I have to build a const array containing functions pointers - the indexes for this array are generated automatically by a tool (not my property) How do I...
3
by: mark.bergman | last post by:
Running lint on code initialising a local 2-D array gives a warning. void f(void) { int a = { 0 }; ... lint gives "warning: Partially elided initialisation..." Should this be happening,...
15
by: jamx | last post by:
How can you initialize an array, in the initialization list of a constructor ?? SomeClass { public: SomeClass() : *init here* { } private: int some_array; };
14
by: dan | last post by:
I would like to have the preprocessor automatically generate the number of array elements requested. Each element is zero. The elements get pasted into a larger array. The other elements may be...
31
by: mdh | last post by:
I am still having a problem understanding K&RII on p 112. I have looked at the FAQs --which I am sure answer it in a way that I have missed, so here goes. A 2-dim array, (per K&R) is really a...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.