# The name of a 2-D array in C

• A+
Category：Languages

I am learning pointers and arrays in C and Here is a question that confused me for a while:

So the name of a 1D int array is a constant pointer to int, which points to the first element in that array. So when we evaluate the name of a 1D array, we should get the address of the first element in the array.

For a 2D int array, the array name is a pointer to the first array of int. So what will be the value of a 2D int array's name? I think it should be the address of the first array in this 2D array. But how is the address of an array defined in C? Is it just the address of the first element in that array?

So the name of a 1D int array is a constant pointer to int

This is wrong, and it is often taught badly. An array is an array. Here is some code for analogy:

``int x = 5; double d = x + 1.2; ``

In the second line `x` is converted to `double` for purposes of addition. This does not change `x` which is still an `int`, the result of conversion is "temporary" and only exists until the addition is finished. The conversion is demanded by the conditions of the `+` operator that both arithmetic operands must be brought to a common type (`double` in this case).

In the array case, say we have `char *p = arrayname + 1` , then `arrayname` is still an array. But it is converted to a temporary pointer so that the addition can occur (the `+` operator requires this, it can add a pointer and an integer). The temporary pointer points to the first element of the array, but it is not correct to say that the temporary pointer is the array.

Most operators invoke this conversion of an array to a temporary pointer, but some do not. So it is not correct to say that `arrayname` is a pointer because it may be used with an operator that does not convert the array to a pointer, e.g. `sizeof arrayname`.

The result of converting an array to a pointer is a pointer to the first element of that array. This is always true even if the first element is itself an array.

But how is the address of an array defined in C? Is it just the address of the first element in that array?

No. Every variable has an address, this applies to arrays and non-arrays. If you understand the address of an `int` then you also understand the address of a 2x2 array of `char`.