指针数组的深入探讨

首先我们来看例子,我们通过例子来弄清楚程序每一步的执行情况

//=================================================

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值