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

int*P[6]={11,22,33,44,55,66};intn=6,i;int**P1=P;for(i=0;i<n;i++)cout<<*P1++<<"";cout<... 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"}
就是可以的。为什么?
展开
 我来答
renjianke
2010-04-10 · TA获得超过2932个赞
知道小有建树答主
回答量:580
采纳率:0%
帮助的人:660万
展开全部
先明白什么是指针数组,指针数组是指这个数组中的每个元素都是一个指针,指针就是地址,指针在使用的时候要有一个确切的指向才可以使用,否则结果是不可预料的。所以你把整型数给它当让是不可以的,改为:
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等就是字符串的首字符的地址。
来元彤8O
2010-04-10 · TA获得超过1452个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:259万
展开全部
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 这些类型的指针
声明的时候 是他们的首地址,而不是赋值。

别急 ,要看明白书!~
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
eqiz
2010-04-10 · TA获得超过103个赞
知道答主
回答量:23
采纳率:0%
帮助的人:31万
展开全部
int *P[6] 是一个整型指针的数组,该数组存储6个整型指针的地址,而不是整数本身。
char *p[6]是一个字符指针的数组,该数组存储6个字符指针(字符串)的首地址,所以这样可以赋值的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鸢梨的小布丁
2015-11-07 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2.3万
采纳率:21%
帮助的人:2214万
展开全部
用数组名赋值给指针时,意思就是让这个指针指向数组的第0个元素
例如
volatile WORD *pCount=m_wCount;
等价于
volatile WORD *pCount=&(m_wCount[0]);
volatile WORD *pCount的真正含义是 ( volatile WORD *)pCount,即声明一个volatile WORD *型的指针变量pCount,*号在这里的作用不是按指针寻址的*运算符,而是声明指针变量的标志。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ahfht888
2019-02-22 · TA获得超过206个赞
知道答主
回答量:184
采纳率:0%
帮助的人:30.7万
展开全部
&是取它的地址,*是取它地址里的内容,我是这么理解的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式