#include <stdio.h>
#include <stdlib.h>
enum{DIM=3};
int zugriff1(int(*a)[DIM],int x,int y)
{
/* bei zur Compilezeit bekannter Spaltendimension kann der Typ diese Info liefern */
return a[x][y];
}
int zugriff2(void*i,int dim,int x,int y)
{
/* bei erst zur Laufzeit bekannter Spaltendimension Nutzung von Zeiger auf VLA + compound literal */
return (int(*)[dim]){i}[x][y];
}
int main() {
/* Spaltendimension DIM ist (Compilezeit)konstant */
int a[DIM][DIM];
for(int j=0;j<DIM;++j)for(int k=0;k<DIM;++k) a[j][k]=j*k;
for(int j
=0;j
<DIM
;++j
,puts(""))for(int k
=0;k
<DIM
;++k
) printf("%d ",zugriff1
(a
,j
,k
)); /* hier keine Spaltendimension nötig, da im Typ vorhanden */
/* Spaltendimension ist jetzt dynamisch */
int d = DIM;
for(int j=0;j<d;++j)for(int k=0;k<d;++k) i[j*d+k]=j*k;
for(int j
=0;j
<d
;++j
,puts(""))for(int k
=0;k
<d
;++k
) printf("%d ",zugriff2
(i
,d
,j
,k
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmVudW17RElNPTN9OwoKaW50IHp1Z3JpZmYxKGludCgqYSlbRElNXSxpbnQgeCxpbnQgeSkKewovKiBiZWkgenVyIENvbXBpbGV6ZWl0IGJla2FubnRlciBTcGFsdGVuZGltZW5zaW9uIGthbm4gZGVyIFR5cCBkaWVzZSBJbmZvIGxpZWZlcm4gKi8KCXJldHVybiBhW3hdW3ldOyAKfQoKaW50IHp1Z3JpZmYyKHZvaWQqaSxpbnQgZGltLGludCB4LGludCB5KQp7Ci8qIGJlaSBlcnN0IHp1ciBMYXVmemVpdCBiZWthbm50ZXIgU3BhbHRlbmRpbWVuc2lvbiBOdXR6dW5nIHZvbiBaZWlnZXIgYXVmIFZMQSArIGNvbXBvdW5kIGxpdGVyYWwgKi8KCXJldHVybiAoaW50KCopW2RpbV0pe2l9W3hdW3ldOwp9CgppbnQgbWFpbigpIHsKCS8qIFNwYWx0ZW5kaW1lbnNpb24gRElNIGlzdCAoQ29tcGlsZXplaXQpa29uc3RhbnQgKi8KCWludCBhW0RJTV1bRElNXTsKCWZvcihpbnQgaj0wO2o8RElNOysrailmb3IoaW50IGs9MDtrPERJTTsrK2spIGFbal1ba109aiprOwoJCglmb3IoaW50IGo9MDtqPERJTTsrK2oscHV0cygiIikpZm9yKGludCBrPTA7azxESU07KytrKQoJCXByaW50ZigiJWQgIix6dWdyaWZmMShhLGosaykpOyAvKiBoaWVyIGtlaW5lIFNwYWx0ZW5kaW1lbnNpb24gbsO2dGlnLCBkYSBpbSBUeXAgdm9yaGFuZGVuICovCgkKCS8qIFNwYWx0ZW5kaW1lbnNpb24gaXN0IGpldHp0IGR5bmFtaXNjaCAqLwoJaW50IGQgPSBESU07CglpbnQgKmk9bWFsbG9jKGQqZCpzaXplb2YqaSk7Cglmb3IoaW50IGo9MDtqPGQ7KytqKWZvcihpbnQgaz0wO2s8ZDsrK2spIGlbaipkK2tdPWoqazsKCQoJZm9yKGludCBqPTA7ajxkOysraixwdXRzKCIiKSlmb3IoaW50IGs9MDtrPGQ7KytrKQoJCXByaW50ZigiJWQgIix6dWdyaWZmMihpLGQsaixrKSk7CgkKCWZyZWUoaSk7CglyZXR1cm4gMDsKfQo=