为什么 char*p="girls";正确,且跟 char p[]="girls";等价。 而 int q[4]={1,2,3,4};写

为什么char*p="girls";正确,且跟charp[]="girls";等价。而intq[4]={1,2,3,4};写成int*q={1,2,3,4};就错了。如果... 为什么 char*p="girls";正确,且跟
char p[]="girls";等价。
而 int q[4]={1,2,3,4};写成
int*q={1,2,3,4};就错了。
如果我改成int*q[4]能正确吗
展开
 我来答
White_MouseYBZ
2016-11-19 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6516万
展开全部

你的表述全错了!

  1. char*p="girls";与char p[]="girls";并不等价:前者是“创建一个常字符串girls,并将这个常字符串的首地址(第一个字符的地址)赋给char *型指针p”;后者是“声明一个名为p的char型数组,并用字符串girls初始化。据此可知,前者的p是普通指针,可以指向别处,而它指向的字符串是常量,不得更改;后者的字符只是数组的内容,是可以更改的,但后者的p是数组名,属常指针,不能指向别处。

  2. int q[4]={1,2,3,4};是声明一个名为q的数组,它有4个元素,并用等号右边的1,2,3,4等4个常数依次初始化数组q的元素q[0]、q[1]、q[2]、q[3],语法上要求右边的常数要用{}括起来。而int*q只是声明了一个int *型指针q,它只能由一个地址作右值来初始化或赋初值,显然等号右边的{1,2,3,4}不具备这种能力。写成int*q[4]也不行,这是声明了一个4个int *型指针元素的数组,得用4个地址来初始化。顺便说一句,计算机语言的语法只是一些规定,学习就得记住正确的写法和意思,有好多是讲不出为什么来的。比如前面提到的int*q={1,2,3,4};是错误的,那是因为C/C++没有提供这种写法并赋以正确意义,如果它提供了也就正确了,没有什么道理!

供参考……

匿名用户
2016-11-19
展开全部
int*q[4] 这个意思 ,,已经不是一维指针了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2018359
2016-11-19 · TA获得超过3494个赞
知道大有可为答主
回答量:3486
采纳率:73%
帮助的人:1417万
展开全部
int*q={1,2,3,4}; 这行分解一下:

定义一个int类型的指针变量q , 后面 ={1,2,3,4} 这部分是想初始化它, 但是 int* q 不能这样初始化.
改为int* q[4] 更不对
应该这样:
int *q;
q=(int*)malloc(sizeof(int)*4);
或者:
int *q=new int[4];
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
叹宇宙之无穷
2016-11-19
知道答主
回答量:21
采纳率:16%
帮助的人:3.4万
展开全部
指针指的字符串首地址,你这指的是啥
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式