cowasaki:
The important thing I didn't know
That is directly tied to my statement.
Understanding the 'actuality' of how arrays work (of any dimension) is the same as knowing that important thing you didn't know.
michael_x:
Actually, seeing memory as a one-dimensional series of storage bytes is a concept as well.
Actually, it is not. Memory IS a one-dimensional series of storage bytes with linear addressing, even at the hardware level. Nothing conceptual about that.
Do you know what the difference is between:
char* const chrptr = (char*)malloc(2);
and
char array1[2];
It's really nothing more than a syntactically different declaration. Functionally, they're identical because you can use them both in exactly the same manners. The following code is perfectly valid:
chrptr[0] = 't';
chrptr[1] = 0;
*array1 = 't';
*(array1+1) = 0;
Arrays ARE const pointers to a block of memory (and thus can also be treated as const pointers).
And conversely, const pointers to blocks of memory can be treated exactly like Arrays.
michael_x:
We do not want to know how multiplexing and adressing is handled behind the scenes
That's unfortunate. There are definite benefit to having such knowledge. For example, if I were to give you this:
char array[10][10] =
{
"asdfqwera",
"qadwdghsd",
"qsdvthefd",
"kdiejksuw",
"djuekwjsd",
"dujehsgcd",
"wujdhskdf",
"dujwhajsv",
"dujwkdidj",
"idkwjushc"
};
And ask you to count the number of 's' in that array, an array syntax method would look something like this:
int count = 0;
for(int x = 0; x < 10; x++)
for(int y = 0; y < 10; y++)
{
if(array[x][y] == 's') count++;
}
But this, would also be a valid method, utilizing a pointer and pointer arith:
int count = 0;
char* p = (char*)array;
for(int x = 0; x < 100; x++)
if(*p++ == 's') count++;
There is more than just a syntactic difference there. The latter method utilizing pointers is about 20% faster than the former method using array indexes.