Declaring a typedef of an array doesn't change the underlying implementation that all arrays are passed as pointers. You might not have any [] or * in the function declaration (as written), but they're still there.
Eg.
Code:
#include<stdio.h>
#include<stdlib.h>
typedef long some_type[64];
void function(some_type a) {
printf("%ld\n", sizeof(a) );
}
int main(void) {
some_type a;
some_type* pa = malloc(sizeof(*pa));
long arr[64];
function(a);
function(*pa);
function(arr);
return 0;
}
A typedef is just an alias for some other type. If you want, you can write out the long form and get exactly the same results.
If you want to pass arrays "by value" (only really worth doing for small arrays), then you can hide the array in a struct, like
Code:
struct sometype {
long arr[64];
};
Remember to keep an eye on the size of your structs. Passing structs by value involves memcpy, and that will get expensive if you're doing it a lot with large structures.