首先我们来看例子,我们通过例子来弄清楚程序每一步的执行情况
//=================================================
#include <iostream>
using namespace std;
int main()
{
char *str[] = {"welcome", "to", "Fortemedia", "NanJing"}; //第1步
char **p = str + 1; //第2步
str[0] = (*p++); //第3步
str[1] = *(p + 1); //第4步
str[2] = p[1] +3; //第5步
str[3] = p[0] + (str[2] - str[1]); //第6步
cout << str[0] << endl;
cout << str[1] << endl;
cout << str[2] << endl;
cout << str[3] << endl;
system("pause");
}
//第1步:
str[]是指针数组,其中指针指向char类型
//第2步:
p此时指向"to"
//第3步:
相当于 str[0] = *p; p++ 因此此时*str[0]中字符串为to, p指向第三个字符串
//第4步:
str[1]中为字符串"NanJing", p仍然指向第三个字符串
//第5步:
p仍然指向第三个字符串, p[0]指向的是"Fortemedia", p[1]就是"NanJing"的第一个元素位置
//第6步:
str[2] - str[1]可以理解成从字符串str[1]中去掉包含str[2]的字符,所剩下的字母个数,也就是3,p[0]指向第三个元素,而此时的第三个元素变为了"Jing",因此str[3]就被赋值为"g"
运行结果:
//===========================================================
其它部分不变,我们把输出改一下,又会得到什么效果呢?
#include <iostream>
using namespace std;
int main()
{
char *str[] = {"welcome", "to", "Fortemedia", "NanJing"};
char **p = str + 1;
str[0] = (*p++);
str[1] = *(p + 1);
str[2] = p[1] +3;
str[3] = p[0] + (str[2] - str[1]);
cout << *str[0] << endl;
cout << *str[1] << endl;
cout << *str[2] << endl;
cout << *str[3] << endl;
system("pause");
}
//===================================================
不要忘了:我们的str[]是存放指针的数组,因此str[0]、str[1]、str[2]、str[3]是四个指针,分别指向元素的第一个字符。
运行效果:
END