[Assorted-commits] SF.net SVN: assorted: [470] sandbox/trunk/src/c/mdarray.c
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-02-19 04:01:41
|
Revision: 470 http://assorted.svn.sourceforge.net/assorted/?rev=470&view=rev Author: yangzhang Date: 2008-02-18 19:58:19 -0800 (Mon, 18 Feb 2008) Log Message: ----------- more md-array fun Modified Paths: -------------- sandbox/trunk/src/c/mdarray.c Modified: sandbox/trunk/src/c/mdarray.c =================================================================== --- sandbox/trunk/src/c/mdarray.c 2008-02-19 00:13:41 UTC (rev 469) +++ sandbox/trunk/src/c/mdarray.c 2008-02-19 03:58:19 UTC (rev 470) @@ -1,18 +1,48 @@ -int xss[3][5]; +#include <stdio.h> +enum { outer = 3, inner = 5 }; + +// This is an Array[outer, Array[inner, Int]] +int xss[outer][inner]; + int main() { - // Don't work. + // These don't work. // int **yss = xss; - // int *yss = xss; - // int **yss = xss; - // int **yss = &&xss[0]; - int (*yss)[5] = xss; + // int **yss = &xss[0]; + // int **yss = &&xss[0][0]; - int sum = 0; - for (int i = 0; i < 3; i++) - for (int j = 0; j < 5; j++) - sum += yss[i][j]; - return sum; + // This is a Pointer[Array[inner, Int]]. + int (*yss)[inner] = xss; + + { + // This is safe. + printf("method 0: indexing\n"); + int sum = 0; + for (int i = 0; i < outer; i++) { + printf("outer visiting: %p\n", &yss[i]); + for (int j = 0; j < inner; j++) { + printf("inner visiting: %p\n", &yss[i][j]); + sum += yss[i][j]; + } + } + printf("sum = %d\n", sum); + } + + { + // This method is wrong, running off into segfault land. + printf("method 1: pointers\n"); + int sum = 0; + for (int (*p)[5] = yss; p < yss + outer; p++) { + printf("outer visiting: %p\n", p); + for (int *q = *p; q < q + inner; q++) { + printf("inner visiting: %p\n", q); + sum += *q; + } + } + printf("sum = %d\n", sum); + } + + return 0; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |