I've a function prototype:
int array_length(char *(ptr)[1024]){
...
}
I want to call this function into another function. I have:
char array_slave[128][1024];
char (*ptr)[1024] = array_slave;
array_length(&ptr);
As the compiler says, this is wrong. But why? Can you explain me "theorically" how to do in this situation? What is the reasoning to do?
CodePudding user response:
The type of ptr is already char(*)[1024]. Thus the type of &ptr is a pointer to pointer to an array char(**)[1024]. It differs from what the function expects thus a warning is raised. Just skip &:
array_length(ptr);
Alternatively you can pass array_slave directly because an array of char[1024] decays to a pointer to its first element producing pointer of char(*)[1024] type.
array_length(array_slave);
