Pass a pointer as array in function in C?
arrays, c, pointers
Solution
It's because of the cast. This line says:
int *a =(int*) {1,2,3};
Treat the array `{1,2,3}` as a pointer to an int. On a 32 bit machine, the value of the pointer is now `1`, which is not what you want.
However, when you do:
int *p = a;
The compiler knows that it can decay the array name to a pointer to it's first element. It's like you'd actually written:
int *p = &(a[0]);
Similarly, you can just pass `a` straight in to the function, as the compiler will also decay the array name to a pointer when used as a function argument:
int a[] = {1,2,3};
int *p = &(a[0]);
f(p, 3)
f(a, 3); // these two are equivalent
Problem
``` void f(int *a, int n) { int i; for (i = 0; i < n; i++) { printf("%d\n", *(a+i)); } } ``` The above code worked ok if in `main()` I called: ``` int a[] = {1,2,3}; int *p = a; f(a, 3); ``` But if in `main()`, I did: ``` int *a =(int*) {1,2,3}; f(a, 3); ``` Then, the program will crash. I know this might look weird but I am studying and want to know the differences.