@freaxx io avrei preferito altre alternative al tuo codice, quali:
Codice:
void old_printAddr(int (*arr)[], size_t s)
{
for (size_t i = 0; i < s; i++)
{
printf("%p %d\n", &(*arr)[i], *(&(*arr)[i]));
}
}
void simple_printAddr(void *arr, size_t s)
{
int* a = (int*) arr;
while(s--)
{
printf("%p %d\n", a, *a);
a++;
}
}
void versatile_printAddr(void *arr, size_t s, size_t n, const char* vw)
{
char* a = (char*) arr;
char v1[80];
char v2[80];
while (n--)
{
sprintf(v1,"%p ",a);
sprintf(v2,vw,*a);
strcat(v1,v2);
puts(v1);
a += s;
}
}
int main()
{
int c[] = {1, 54, 42, 44, 33};
char x[] = {'a','b','c'};
// esempio su singola riga senza uso
// di alcuna funzione
// printf("%p %d\n", &c[2], *(&c[2]));
puts("Simple Vector int");
simple_printAddr(&c, 5);
puts("Versatile Vector int");
versatile_printAddr(&c, sizeof(int), 5,"%d");
puts("Versatile Vector char");
versatile_printAddr(&x, sizeof(char), 3,"%c");
return 0;
}
Ho poi bloccato lo standard c99 quindi non l'ho nemmeno compilato il tuo codice.
Quote:
||=== Build: Debug in iop (compiler: GNU GCC Compiler) ===|
main.c||In function ‘old_printAddr’:|
main.c|71|error: ‘for’ loop initial declarations are only allowed in C99 mode|
main.c|71|note: use option -std=c99 or -std=gnu99 to compile your code|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
|
Niente flame però! solo questione di gusti personali.