33,321
社区成员




A[B]
*(A+B)
*(B+A)
B[A]
//以上四行等价
"abc"[1]
*("abc"+1)
*(1+"abc")
1["abc"]
//以上四行等价
A[0]
*(A)
0[A]
//以上三行等价
char *s[] = {"one","two","three"},*p;
p = s[1];
printf("%c,%s\n",*(p+1),s[0]);
/*char *s[] 是一个指针数组,你也把它看作二维数组,数组每个成员都是一个指针(字符串),用char *p=s[1],即指针p指向指针数组的第2个成员的首地址,此时p指向第二个字符串"two"
* 指针指向数组的时候是指向数组的首地址的,所以*p=*(p+0)=t,*(p+1)=w,*(p+2)=o
* s[0]就是s[]的第一个成员,即one,所以第一个输出 w,one
*/
char *a[4]={"Tokyo","Osaka","Sapporo","Nagoya"};
char **pt;
pt = a;
printf("%s\n",*(pt+2));
/** 这个题和上面一点点不同,pt是一个二级指针,二级指针和一级指针不同;一级指针保存的是一个字符的地址,比如上面的p保存的t的地址,而二级指针保存的是一个字符串的地址
* 即*pt = Tokyo,*(pt+1)==Osaka,*(pt+2)=Sapporo.
*
* /