找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3159|回复: 0
打印 上一主题 下一主题
收起左侧

数组名是常量不能自加

[复制链接]
跳转到指定楼层
楼主
ID:102668 发表于 2016-1-16 07:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
char p[] = "ssd";
++ p;
为什么会提示'++' needs l-value  ?

为什么
char *p = "ssd";
++ p;
却可以呢???
随随便便回复于17日03点25分 
楼主,数组名跟指针是不能等同的。
tian_007回复于17日05点51分 
数组名是右值?惭愧了,刚知道,以前一直以为和指针是一样的呢
hsxsmz回复于17日08点00分 
数组名可以转换为指向其指代实体的指针,但是它只能被看作一个指针常量,不能被修改。
pangdudu回复于17日10点00分 
char p[] = "ssd";
char b[] = "asd";
p =b;

提示 '=' : left operand must be l-value


char *p = "ssd";
char *b = "asd";
p = b;
则通过

数组名与指针有什么区别???
wql0536回复于17日11点48分 
数组名是常量
改成char*p不就行了
方卓然回复于17日13点25分 
一句话 数组名不能作左值...
小乖鼠回复于17日14点59分 
数组名是常量,不能做自增操作
刘泉05回复于17日16点21分 


有什么不同??具体说一下
幸福小托盘回复于17日17点42分 


有什么不同??具体说一下
Afoit1000回复于17日18点51分 


正解
bjlantian回复于17日19点54分 
指针名类型 char* const p=..(指向不可变)
wangziqing回复于17日20点54分 
错了不好意思^_^
#include  
using namespace std;


int main(){
char *pch = "abc";

cout < < *pch < < endl;
++pch;
cout < < *pch < < endl;
}
hsu0115回复于17日21点48分 

up!!
cnppri回复于17日22点31分 
char p[] = "ssd";
这是编译器事先界定了的,它是一个常量指针变量,初始化后,无法再变更。
p++,机器侦测到你有意图变更它,立刻报警,机器天生明白。
char p[4];
p = "ssd";
//如此拆分也不行,报error C2106: '=' : left operand must bel-value

说个题外话,象*p+1、p+1、&p+1这类操作,让人看了费解,但机器天生知道。
家有硕鼠回复于17日23点18分 
char p[] = "ssd";
这时p是数组名,只有指针才能++,数组名不能++的。
daisyfeelyg回复于18日01点55分 
同意
xinyuefff回复于18日03点36分 

顶又学到了。
太行晴雪回复于18日04点13分 



这楼兄弟说到点子上了。
指针可以++操作,而数组名也可以转化为指向第一个元素的指针,但是为什么数组名不能++操作呢?
因为定义了一个数组,那么这个数组的地址就是固定的了。如char p[] = "ssd"; 那么p的地址是固定的。相当于char*const类型。改变p的指向当然错了。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表