I am not entirely clear on how to do pointers to multidimensional arrays. It seems that if p is a pointer to the first element of the multidimensional array then you cannot properly use the "p[i][j]" notation (my compiler returns an error, something along the lines of "subscripted value is neither an array nor a pointer"). Instead, you have to do a pointer to the first element of the array viewed as a 1-dim array of 1-dim arrays, which makes the typedefs somewhat more complicated. Furthermore, if you have a function which only knows the pointer to the first real element, you cannot use this trick and you have to do some arithmetic to work out the value. I am sure there must be a better way to do this.
This prints the correct answer of 4, but:Code:#include <stdio.h> typedef int Test[8]; int *TestFn(int *t) { t[11] = 4; return t; } int main () { Test *p; Test k[8]; int *t; p = &k[0]; t = &k[0][0]; t = TestFn(t); printf("%d", p[1][3]); getchar(); return 0; }
1. The line "t[11] = 4" is rather cryptic. Obviously we know it is right because 1*8 + 3*1 = 11, but someone else might not know. Is there a way to put a double subscript to show the actual array position? As I commented earlier, "t[1][3]" doesn't seem to work.
2. It is not entirely clear that k is a two-dim array. Obviously I would like to have a definition like:
but I then could not see what type to set p as. Is there a better way around this one too?Code:int k[8][8];
Adam.