o wyrażeniu „& anArray” w c
Najpierw przeczytałem, że:
array
&array
&array[0]
wszystko będzie takie samo, jak długo „tablica” jest naprawdę tablicą. Próbowałem więc:
int main(){
char ar[]={'a','b','c','\0'};
printf("argument: &ar %s\n",&ar);
printf("argument: &ar[1] %s\n",&ar[1]);
}
wyjście:
argument:&ar abc
argument:&ar[1] bc
Wygląda na to że&ar
jest traktowany jako wskaźnik do pierwszego elementu zamiast wskaźnika do „ar”, który sam jest wskaźnikiem do pierwszego elementu, jeśli się nie mylę.
ponieważ nie powinno być tak, że & (wskaźnik na znak) jest traktowany, próbowałem:
char a='s';
char *pa=&a;
printf("argument: &pa %c\n",&pa);
Wyjście dla%c
nie jest nawet postacią. Nie powinno to być również traktowanie wskaźnika do pierwszego elementu tablicy. Próbowałem:
char *pa=&ar[0];
char **ppa= &pa;
printf("argument: &pa %s\n", ppa);
Wyjście dla%s
nie jest zaskakujące, nonsens; ale dlaczego nie&ar
był nonsens? Bo jeśliar
były wskaźnikiem, nie powinny&ar
być tak samo wskaźnikiem do wskaźnika jak jestppa
?
Moje pytania:
Czy po prostu „&” jest ignorowane po umieszczeniu przed nazwą tablicy? Czy nazwy tablic są po prostu specjalne?Jeśli tak, w jaki sposób kompilator sprawdza, czy identyfikator następujący po znaku „&” jest odwołaniem do tablicy? Czy faktycznie wyszukuje go na liście tablic, więc dla deklarowanych?