How to initialize a 2D static array?

Discussion in 'C Programming' started by Vol, Mar 10, 2007.

  1. Vol

    Vol Guest

    Hi, Group,

    I want to initialize a 2D static array in function 'foo ()', where
    'foo' is called by another function a lot of times.
    I list my implementation below but I think there are better
    solutions , thanks

    void foo()
    {
    int i, j;
    static int dis_sum[100][100] = {18*90};
    static int tmp = 0;

    if (tmp == 0)
    {
    for(i = 0; i < 100; i++)
    for(j = 1; j < 100; j++)
    dis_sum[j] = 18*90;
    }
    tmp = 1;
    }
    Vol, Mar 10, 2007
    #1
    1. Advertising

  2. "Vol" <> writes:
    > I want to initialize a 2D static array in function 'foo ()', where
    > 'foo' is called by another function a lot of times.
    > I list my implementation below but I think there are better
    > solutions , thanks
    >
    > void foo()
    > {
    > int i, j;
    > static int dis_sum[100][100] = {18*90};


    This initializes only the first element to 18*90; the others will be
    initialized to 0. Since you're going to execute the loop before using
    it, you don't need to bother initializing it when it's declared.
    (Since it's static, it will be implicitly initialized to all zeros.)

    > static int tmp = 0;


    "tmp" is a lousy name; call it something like "dis_sum_initilaized".

    > if (tmp == 0)
    > {
    > for(i = 0; i < 100; i++)
    > for(j = 1; j < 100; j++)
    > dis_sum[j] = 18*90;
    > }
    > tmp = 1;
    > }


    100 is a "magic number"; if you later change the size of the array,
    you'll have to change the values in several places in your code. Use
    declared constants, most likely macros. Likewise for 18*90.

    Apart from that, it looks like a reasonable way to initialize a static
    object when the initial value is too complex for an actual
    initializer. (It would be nice if there were a syntax for "initialize
    all elements to 18*90".)

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
    Keith Thompson, Mar 10, 2007
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. RCAJ
    Replies:
    6
    Views:
    40,537
    Jeff Schwab
    Dec 28, 2003
  2. Replies:
    10
    Views:
    662
  3. mathieu
    Replies:
    13
    Views:
    790
    terminator
    Nov 10, 2007
  4. mathieu
    Replies:
    2
    Views:
    534
    mathieu
    Nov 8, 2007
  5. syang8
    Replies:
    4
    Views:
    697
    James Kanze
    Jun 21, 2008
Loading...

Share This Page