c++ 指针数组问题

来源:百度知道 编辑:UC知道 时间:2024/05/15 12:33:13
#include<iostream>
using namespace std;
void main(void)
{

char *cPtr[2]={"tom","jimmy"};
char cArr[2][10]={"tom","jimmy"};

cout<<"cPtr[0] is "<<cPtr[0]<<endl; //输出 tom
cout<<"cPtr[0][0] is "<<cPtr[0][0]<<endl; // 输出 't'
cout<<"cPtr[0][1] is "<<cPtr[0][1]<<endl; // 输出 'o'
cout<<"cPtr[0][2] is "<<cPtr[0][2]<<endl; // 输出 'm'

cout<<"cArr[0] is "<<cArr[0]<<endl; //输出 tom
cout<<"cArr[0][0] is "<<cArr[0][0]<<endl; // 输出 't'
cout<<"cArr[0][1] is "<<cArr[0][1]<<endl; // 输出 'o'
cout<<"cArr[0][2] is "<<cArr[0][2]<<endl; // 输出 'm'

}

//---------------------------------------

它只是输出你cPtr指针指向字符串的第2个位置的数据而已,不具有实际意义~~~ ++++++++++++++++++++++++++++++++++++++++++调试了一下,char *cPtr[2]声明后 并不是在内存中自动转化成char *cPtr[2]====>>char cPtr[][],而是定义了两个指向字符型数据的指针,cPtr[0]中保存的是字符串“tom”的首地址,这个指针指向“tom”字符串而不是存储了这个字符串的内容

而char cArr[2][10]中才保存了字符串的真正内容,但是要注意字符串最大长度应该<=9因为字符串结尾还要加\0.

不是那样的,char *cPtr[2]声明后,其实它就是一个普通的一维数组,成员是char*类型,就2个元素
{"tom","jimmy"},这一句赋初值,其实系统为"tom","jimmy"两个字符串各自分配了内存空间,然后只是把这两个地址值存到cPtr中的两个元素中而已

又是这道题,在哪见过好象。

#include<iostream>
using namespace std;
void main(void)
{

char *cPtr[2]={"tom","jimmy"};
char cArr[2][10]={"tom","jimmy"};

//打出来看看有没有规律,cPtr[0],cPtr[1]应该是和cArr相差很远的吧
cout<<cPtr[0]<<endl;
cout<<cPtr[1]<<endl;
cout<<cArr<<endl;

cout<<"cPtr[0] is "<<cPtr[0]<<endl; //输出 tom
cout<<&