字符串指针数组
#include <iostream>
using namespace std;
int main()
{
char *p[]={"BOOL","OPK","H","SP"};
cout<<p<<endl;//B的地址
cout<<*p<<" "<<p[0]<<endl;//BOOL
cout<<*p[0]<<" "<<p[0][0]<<" "<<*(p[0]+1)<<p[0][1]<<endl;//B B O O
cout<<*(p+1)<<" "<<p[1]<<endl;//OPK OPk
int i;
for (i=3;i>=0;i--,i--)
{
cout<<*p[i];//S O
cout<<endl;
}
for (i=3;i>=0;i--,i--)
{
cout<<(*p)[i];// L O
cout<<endl;
}
}
这行代码定义了一个字符指针数组 p
p[i]指向首字母但输出是整个字符串 即第i个字符串[]有解引用的意思 理解为*(p+i)
*p[i]是第i个字符串的首字母
理解为*(*(p+i))
char c[]="hello";
char* ptr1=c;
cout<<c<<" "<<ptr1<<" "<<*ptr1<<" "<<*(ptr1+1)<<" "<<ptr1[1]<<endl; //hello hello h e e
//char* ptr2=&c;//不可以这样 &c 并不退化为指向第一个元素的指针,而是指向整个数组的指针,
//其类型是 char (*)[6],表示指向一个包含6个 char 的数组的指针。
char** ptr2=&ptr1;//一个字符串指针的指针
cout << ptr2 << " " << *ptr2 << " " << **ptr2 << " " << *(*ptr2+1) << " " << (*ptr2)[1] << endl;//0x70fdd8ptr1的地址 ptr1hello h e e
看这个注释 就硬记吧