469,960 Members | 2,587 Online

# 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?

Jun 27 '08 #1
4 1437
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
"HundredInts". 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.
Jun 27 '08 #2
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?

"mat" contains the address of the first element of your 2D array.
"**mat" is the first element of your 2D array.
Jun 27 '08 #3
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
Jun 27 '08 #4
nembo kid <us**@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
Jun 27 '08 #5

### This discussion thread is closed

Replies have been disabled for this discussion.