|
发表于 2019-10-12 20:08:15
|
显示全部楼层
char *strings[]定义两个指针数组,即*strings[0]和*string[1],它们分别指向两个字符数组,p=strings即将string的地址头地址赋值给p,这里是将字符串的头地址赋给p,而p+i不再是简单的加法而是“地址+i”,所以按照地址加i的原则,这里取到string的地址加i,意味着取到下一个字符串的首地址,所以可以取下一个字符串。
要取某个字符,可以这么想,我们知道字符串的首地址,就可以继续string[0]+i 取字符,“string[0]+i”运算也可等价于"string[0][i]"运算,注意输出的格式就行了。
#include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
char *strings[]= {"C language", "Basic" };
char **p,i;
p=strings;
for (i=0; i<2; i++)
{
printf("%s\n",*(p+i));
}
printf("%c\n",*strings[0]);
printf("%c\n",strings[0][0]);
printf("%c\n",**p);
cout<<p<<endl;
cout<<p+1<<endl;
cout<<strings<<endl;
cout<<strings+1<<endl;
cout<<"*p= "<<*p<<endl;
cout<<"*p+1= "<<*p+1<<endl;//移了一个地址
cout<<"*(p+1)="<<*(p+1)<<endl;
cout<<"*strings= "<<*strings<<endl;
cout<<"*strings+1= "<<*strings+1<<endl; //移了一个地址
cout<<"*(strings+1)= "<<*(strings+1)<<endl;
cout<<"*p[0]= "<<*p[0]<<endl;
cout<<"*strings[0]= "<<*strings[0]<<endl;
cout<<"*p[0]= "<<*p[0]<<endl;
cout<<"strings[0][4]= "<<strings[0][4]<<endl;
cout<<"strings[1][2]= "<<strings[1][2]<<endl;
cout<<"/*******************************/"<<endl;
for(int i=0; i<2; i++)
{
cout<<"*(p+"<<i<<")="<<*(p+i)<<endl;
}
return 0;
} |
|