about that weird behavior of array dereference when it has the (somehow function pointer like) syntax "T (*v)[U]". The only advantage of this is that one has the size of the whole array (which one has anyway as it has to be available at compile time). The price for that is that one has to add another level of dereference. Is there any other advantage I'm not aware of? Why not just using a const/constexpr/define for the fixed array size? Here's the code I tested this with:
#include <stdio.h>
void function(int *arr) {
printf("sizeof(arr) = %d\n", sizeof(arr)); // size of pointer
printf("arr = %d\n", arr); // addr of array
printf("*arr = %d\n", *arr); // first element
}
void function2(int (*arr)[10]) {
printf("sizeof(arr) = %d\n", sizeof(arr)); // size of pointer
printf("sizeof(*arr) = %d\n", sizeof(*arr)); // size of array (already known at compile time)
printf("arr = %d\n", arr); // addr of array
printf("*arr = %d\n", *arr); // addr of array
printf("**arr = %d\n", **arr); // first element
}
void main(int argc, char* argv[]) {
int a[10] = {42};
printf("\n==================\n");
function(a);
printf("\n==================\n");
function2(&a);
}
Output:
==================
sizeof(arr) = 4
arr = 13629964
*arr = 42
==================
sizeof(arr) = 4
sizeof(*arr) = 40
arr = 13629964
*arr = 13629964
**arr = 42
There isn't any advantage from for it.
Why don't you use a reference? O.o
Обсуждают сегодня