In effetti e` la stessa cosa che avrei pensato io fino a 10 minuti fa, ovvero prima di vedere l`output in asm di quel listato.
Guarda qui:
Come vedi, puoi passare un array multidimensionale statico purche` tu specifichi tutte le dimensioni tranne la prima, che e` opzionale. E a volte mi sono chiesto il perche` di cio`, ed ora l`ho capito cazzo!codice:#include <stdio.h> #include <string.h> void stampa1( char telf[][ 14 ] ) { int i; for( i = 0; i < 3; i++ ) printf( "tel%i: %s\n\n", i, telf[ i ] ); } void stampa2( char* telf ) { int i; for( i = 0; i < 3; i++ ) printf( "tel%i: %s\n\n", i, &telf[ i * 14 ] ); /* Alternativa: * printf( "tel%i: %s\n\n", i, telf + i * 14 ); */ } void stampa3( char esempio[][ 2 ][ 3 ] ) { /* ... */ } int main() { char tel[ 3 ][ 14 ]; char esempio[ 1 ][ 2 ][ 3 ]; strcpy( tel[ 0 ], "0661564048" ); strcpy( tel[ 1 ], "0666397" ); strcpy( tel[ 2 ], "3297752447" ); stampa1( tel ); stampa2( ( char* ) tel ); stampa3( esempio ); return 0; }
Un array statico multidimensionale in C non e` un array di array, quindi ha differente livello di indirezione da un puntatore a puntatore!!!
'tel' va in effetti castato a char*, e i limiti dell`array specificati nel prototipo delle funzioni sono indispensabili per calcolare l`offset dal puntatore all`inizio dell`array, che quindi a basso livello e` _sempre_ monodimensionale (qui e` char*)!
Ti ringrazio per avermi spinto ad approfondire l`argomento.
Ciao.



Rispondi quotando