关于c++中指针数组赋值时的迷惑

int *P[6]={11,22,33,44,55,66};
int n=6,i;
int **P1=P;
for(i=0;i<n;i++)
cout<<*P1++<<" ";
cout<<endl;
P1=P;
for(i=0;i<n;i++)
cout<<**P1++<<" ";
这样写为什么是错误的?
int *P[6];
int n=6,i;
int **P1=P;
for(i=0;i<n;i++)
p[i]=i;(这儿也是错误的,改为p[i]=(int *)i则最后一句输出时错误的)
for(i=0;i<n;i++)
cout<<*P1++<<" ";
cout<<endl;
P1=P;
for(i=0;i<n;i++)
cout<<**P1++<<" ";
请问这些错误都是为什么?
int *P[3];
int x1,x2,x3;
cin>>x1>>x2>>x3;
P[0]=new int(x1);
P[1]=new int(x2);
P[2]=new int(x3);
int n=3,i;
int **P1=P;
for(i=0;i<n;i++)
cout<<*P1++<<" ";
cout<<endl;
P1=P;
for(i=0;i<n;i++)
cout<<**P1++<<" ";
则又是正确的,请详细说明一下。
而且对于char *p[6]={"Orange","Pear","Banana","Peach","Apple","Guava"}
就是可以的。为什么?

先明白什么是指针数组,指针数组是指这个数组中的每个元素都是一个指针,指针就是地址,指针在使用的时候要有一个确切的指向才可以使用,否则结果是不可预料的。所以你把整型数给它当让是不可以的,改为:
int a=0,b=1,c=2,d=3,e=4,f=5;
int *P[6]={&a,&b,&c,&d,&e,&f}; 就可以。
int *P[6]={&a,&b,&c,&d,&e,&f};这一句使得数组中的各指针有了一个确切的指向。

int *P[3];
int x1,x2,x3;
cin>>x1>>x2>>x3;
P[0]=new int(x1);
P[1]=new int(x2);
P[2]=new int(x3);
对于此指针数组中的元素 p[0] p[1],p[2]动态分配内存,动态分贝内存就是使该指针有一个合法的地址,指针也就有了一个确切的指向。

char *p[6]={"Orange","Pear","Banana","Peach","Apple","Guava"}
字符串有其特殊性,字符串末尾以‘\0’作为结束标志,存储时连续的,所以存储字符串不需要存储每一个字符的地址,只需要首字母的地址即可。
通过 cout<<**P1++<<" ";就可以看出此句只输出每个字符串的首个字母。

char *p[6]={"Orange","Pear","Banana","Peach","Apple","Guava"}该句相当于如下:
char *s1 = "Orange";
char *s2 = "Pear";
char *s3 = "Banana";
char *s4 = "Peach";
char *s5 = "Apple";
char *s6 = "Guava";
char *P[6]={s1,s2,s3,s4,s5,s6};
而s1,s2等就是字符串的首字符的地址。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-10
p[i]=i;(这儿也是错误的,改为p[i]=(int *)i则最后一句输出时错误的)

当你错误的时候 你先看看他们的类型 int *P[6]; i应该是 int吧

p[i]=i; // 指针地址=变量;错误
p[i]=(int *)i //指针地址 是不能被赋值的

我知道 你想干嘛 , 你得这样
*p[i]=i;//*p[i]就是 地址 所指的值~!而不在是地址了

char *p[6]={"Orange","Pear","Banana","Peach","Apple","Guava"}
就是可以的。为什么?

在这里 char类型 char *p[6 代表着 字符数组的首地址 ,而不在是赋值了!~所以可以。

问题出在 :
你没有弄明白 指针的声明 和 指针的使用 他们的区别!~
他们的写法 是不一样的
我暂举 一例:
定义: int *p;定义指针
使用:
p=&i;指针的地址是 i的地址
*p=5;指针的值是5;

不同的是 char string 这些类型的指针
声明的时候 是他们的首地址,而不是赋值。

别急 ,要看明白书!~本回答被提问者采纳
第2个回答  2010-04-10
int *P[6] 是一个整型指针的数组,该数组存储6个整型指针的地址,而不是整数本身。
char *p[6]是一个字符指针的数组,该数组存储6个字符指针(字符串)的首地址,所以这样可以赋值的。
第3个回答  2015-11-07
用数组名赋值给指针时,意思就是让这个指针指向数组的第0个元素
例如
volatile WORD *pCount=m_wCount;
等价于
volatile WORD *pCount=&(m_wCount[0]);
volatile WORD *pCount的真正含义是 ( volatile WORD *)pCount,即声明一个volatile WORD *型的指针变量pCount,*号在这里的作用不是按指针寻址的*运算符,而是声明指针变量的标志。
第4个回答  2019-02-22
&是取它的地址,*是取它地址里的内容,我是这么理解的
相似回答