Mylące wskazówki w C
Mam więcej niż jedną wątpliwość, więc proszę o cierpliwość. Czy ktoś może mi powiedzieć, dlaczego ten kod zawodzi?
#include<stdio.h>
void main(int argc,char **argv) /*assume program called with arguments aaa bbb ccc*/
{
char **list={"aaa","bbb","ccc"};
printf("%s",argv[1]);/*prints aaa*/
printf("%s",list[1]); /*fails*/
}
Zakładałem, że ma to coś wspólnego ze wskaźnikiem do rzeczy wskaźnikowych, których nie rozumiem wyraźnie. Więc spróbowałem:
#include<stdio.h>
void main()
{
char **list={"aaa","bbb","ccc"};
char *ptr;
ptr=list;
printf("%s",ptr);/*this prints the first string aaa*/
/* My second question is how do i increment the value
of ptr so that it points to the second string bbb*/
}
Jaka jest różnica pomiędzychar *list[]
ichar **list
iw jakich sytuacjach oba są idealne do użycia? Jeszcze jedna rzecz, która mnie myli, że jest wyjątkowa? kiedy przechodzęchar **list
do innej funkcji, zakładając, że pozwoliłoby mi to uzyskać dostęp do zawartości w sposób, w jaki mogłemargv
, to także zawiodło.
Zdaję sobie sprawę, że podobne pytania zostały zadane w przeszłości, ale nie mogę znaleźć tego, czego potrzebuję. jeśli tak, czy ktoś może zamieścić odpowiednie linki.