指针数组:指针的数组,表示一个数组,并且数组的每一个元素都是指针类型。
数组指针:数组的指针,表示一个指针,并且是指向数组的指针。
看看下面每行的分析,学习啦~
[cpp] view plain copy
- #include <iostream>
- using namespace std;
- int main ( )
- {
- char *str[]={"welcome","to","fortemedia","Nanjing"};
- char * * p=str+1; //p指向 "to"字符串地址
- str[0]=(*p++) +2; //str[0]指向‘\0‘; 然后p后移 p=str[2]
- str[1]=*(p+1); //p+1后 p+1 = str[3]; 然后 str[1] = str[3]
- str[2]=p[1]+3; //str[2]指向str[3]的从0开始数的第三个 str[2]指向"jing"地址
- str[3]=p[0]+(str[2]-str[1]); //str[3]指向从p[0]开始(也就是*p,也就是str[2])的 偏移量为(str[2]-str[1])的地址~ str[2]指向"jing",str[1]指向str[3],也就是"Namjing",所以str[3]指向"jing"的"g"地址
- printf("%s\n",str[0]);
- printf("%s\n",str[1]);
- printf("%s\n",str[2]);
- printf("%s\n",str[3]);
- return 0;
- }
[cpp] view plain copy
- int main()
- {
- char *str[] = {"Welcome","to","Fortemedia","Nanjing"};
- char **p = str + 1;
- str[0] = *p++;
- //{"to","to","Fortemedia","Nanjing"};
- str[1] = *(p+1);
- //{"to","Nanjing","Fortemedia","Nanjing"};
- str[2] = p[1] + 3;
- //{"to","Nanjing","jing","Nanjing"};
- str[3] = p[0] + (str[2] - str[1]);
- //str[2]-str[1]是原来的指向Nanjing中的j的指针减去Nanjing中的N的指针,当然是3了
- //p[0] 是指向"jing"中的j的,再加3就是g了
- printf("%s\n",str[0]);
- printf("%s\n",str[1]);
- printf("%s\n",str[2]);
- printf("%s\n",str[3]);
- return 0;
- }
时间: 2024-10-15 22:21:53