Am Dienstag, dem 21.11.2023 um 02:30 +0000 schrieb André Albergaria Coelho via
Gcc:
> Hello
>
> #include <stdio.h>
>
> void func(char *ptr) {
> printf("\n%i",sizeof(ptr));
> }
>
> int main(void) {
> char arr[10];
> printf("\n Sizeof arr %i",sizeof(arr));
> func(arr);
>
> return 0;
> }
>
> /* sizeof(arr) != sizeof(ptr), but they point to same thing. */
>
>
> So problem. On main, arr has size 10, while on func, arr has size 8. But
> they are equal.
No problem. sizeof(ptr) is the size of the pointer object
itself, while arr is the size of the array.
In func(arr) the array is converted to a pointer to
its first element.
If you want to pass the address of the array itself and
then get its size in 'func' you could write it like this:
#include <stdio.h>
void func(char (*ptr)[10]) {
printf("\n%i",sizeof(*ptr)); // sizeof pointer target
}
int main(void) {
char arr[10];
printf("\n Sizeof arr %i",sizeof(arr));
func(&arr); // pass address to array
return 0;
}
Martin
>
>