sobre a expressão “& anArray” em c
Primeiro, eu li isso:
array
&array
&array[0]
Tudo será o mesmo, desde que "array" seja realmente um array. Então eu tentei:
int main(){
char ar[]={'a','b','c','\0'};
printf("argument: &ar %s\n",&ar);
printf("argument: &ar[1] %s\n",&ar[1]);
}
a saída:
argument:&ar abc
argument:&ar[1] bc
Parece que&ar
é tomado como um ponteiro para o primeiro elemento em vez de um ponteiro para "ar", que em si é um ponteiro para o primeiro elemento, se não me engano.
porque isso não deve ser como & (ponteiro para um char) são tratados, eu tentei:
char a='s';
char *pa=&a;
printf("argument: &pa %c\n",&pa);
A saída para%c
nem é um personagem. Nem deveria ser como um ponteiro para o primeiro elemento de um array tratado. Eu tentei:
char *pa=&ar[0];
char **ppa= &pa;
printf("argument: &pa %s\n", ppa);
A saída para%s
é, sem surpresa, um disparate; mas porque não tem&ar
foi um disparate? Para sear
eram um ponteiro, não deveria&ar
ser tanto um ponteiro para um ponteiro como éppa
?
Minhas perguntas:
É simplesmente "&" ignorado quando colocado antes de um nome de matriz? Os nomes das matrizes são simplesmente especiais?Em caso afirmativo, como o compilador verifica se o identificador que segue "&" é uma referência a uma matriz? Ele realmente procura por ele em uma lista de matrizes para declarado?