First address of a bidimensional array

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • nembo kid

    First address of a bidimensional array

    I have the following bidimensional array

    int a [100][100];

    Why the first address of this array is only:

    & (mat[0][0])

    and not also:

    mat

    like any other array?

    Thanks in advance
  • =?ISO-8859-1?Q?Tom=E1s_=D3_h=C9ilidhe?=

    #2
    Re: First address of a bidimensional array

    On May 7, 3:12 pm, nembo kid <u...@localhost .comwrote:
    I have the following bidimensional array
    >
    int a [100][100];

    You're right that this is a bi-dimensional array, however the C
    language sees it and treats it as an array of arrays. It's the same as
    doing the following:

    typedef int HundredInts[100];

    HundredInts a[100];

    Why the first address of this array is only:
    >
    & (mat[0][0])
    >
    and not also:
    >
    mat

    You have an array consisting of 100 elements, each of which is a
    "HundredInt s". The first element of this array is a HundredInt. You
    get the first element by doing the following:

    a[0];

    The type of a[0] is HundredInts, so a pointer to the first element is
    going to be a "HundredInt *", or "int (*)[100]".

    Basically it all boils down to the fact that a multi-dimensional
    arrays is implemented as an array of arrays.

    Comment

    • S S

      #3
      Re: First address of a bidimensional array

      On May 7, 7:12 pm, nembo kid <u...@localhost .comwrote:
      I have the following bidimensional array
      >
      int a [100][100];
      >
      Why the first address of this array is only:
      >
      & (mat[0][0])
      >
      and not also:
      >
      mat
      >
      like any other array?
      >
      Thanks in advance
      "mat" contains the address of the first element of your 2D array.
      "*mat" is the first address of your array.
      "**mat" is the first element of your 2D array.

      Comment

      • Default User

        #4
        Re: First address of a bidimensional array

        nembo kid wrote:
        I have the following bidimensional array
        >
        int a [100][100];
        I assume you mean "mat" here, to be consistent with what follows.
        Why the first address of this array is only:
        >
        & (mat[0][0])
        It's not. That's the first element of the first element.
        and not also:
        >
        mat
        That gives you the address of the first element. The first element is
        an array of int of size 100.
        like any other array?
        It is like any other array. You just don't understand how it works. The
        name of the array in most circumstances is converted to a pointer to
        the first element. So "mat" is of type "pointer to array 100 of int",
        and points to the beginning of mat[0].

        I recommend reading over the FAQ entries on pointers and arrays.




        Brian

        Comment

        • Chris Torek

          #5
          Re: First address of a bidimensional array

          In article <4821b7c6$0$359 57$4fafbaef@rea der2.news.tin.i t>
          nembo kid <user@localhost .comwrote:
          [given]
          >int a[100][100];
          >Why the first address of this array is only:
          >&(mat[0][0])
          [vs mat, mat+0, or &mat[0]; but consider also &mat!]

          See the diagram at <http://web.torek.net/torek/c/pa.html>: there
          are multiple "first address"-es, differing in type, and hence in
          the "size of the circles".

          Here is the next point to ponder: Are they all "the same" address?
          Maybe they are, maybe they are not. Is 3.14159265 the same number
          as 3? How about 3.00000 vs 3? What happens if you printf() the
          result of the following four comparisons?

          (int)3.14159265 == 3
          (double)3 == 3.14159265
          (int)3.0 == 3
          (double)3 == 3.0

          Based on what you get if you do printf() those, is it perhaps the
          case that 3.0 is "more equal to 3" than 3.14159265?

          (We can only compare things for equality after we convert them to
          some common type, and the conversion itself may -- or may not --
          change "something important". When we convert a double to an int,
          we chop off the fractional part. Is it important? Maybe, but
          maybe not: it all depends on what we *meant* with the original
          double.)
          --
          In-Real-Life: Chris Torek, Wind River Systems
          Salt Lake City, UT, USA (40°39.22'N, 111°50.29'W) +1 801 277 2603
          email: gmail (figure it out) http://web.torek.net/torek/index.html

          Comment

          Working...