打印
[C语言]

字符数组可以++吗?

[复制链接]
2921|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanghelovehuang|  楼主 | 2018-7-23 18:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
tanek| | 2018-7-23 18:12 | 只看该作者
    char a[] = "aaaa";
    char *b;
    b = a+1;

如果这样就可以。 b是指针变量。

使用特权

评论回复
板凳
airwill| | 2018-7-23 19:28 | 只看该作者
这里的
a++  
也不好理解, 你在增量什么
是数组的地址, 还是数组里各一个的数值, 或是某一个数值?

使用特权

评论回复
地板
iDiy| | 2018-7-23 19:37 | 只看该作者
a是常量

使用特权

评论回复
5
caoenq| | 2018-7-23 21:03 | 只看该作者
地板正解

使用特权

评论回复
6
linqing171| | 2018-7-23 21:13 | 只看该作者
数组名不能作为++运算的左值。

使用特权

评论回复
7
知识11| | 2018-7-23 21:20 | 只看该作者
有个cahr型数组 char a[] = “fsdfa”。  
char *b;
b=a;      
       b++;
       printf("a = %c\n", *a);

使用特权

评论回复
8
eydj2008| | 2018-7-24 08:12 | 只看该作者
这个问题 改编译器就可以了 ,你适合更高级的语言.
C的效率高 但是规则不少.  汇编的效率更高,规则更多.

这里的a 表示一个地址 ,但不是变量,好吧   (我知道你的理解:你就是定义的一个数组 全都是变量,你想说怎么不能++, 因为a == &a[0], 是等效的, 他就是一个RAM地址)

使用特权

评论回复
9
yanghelovehuang|  楼主 | 2018-7-24 09:40 | 只看该作者
airwill 发表于 2018-7-23 19:28
这里的
a++  
也不好理解, 你在增量什么

当然是地址了,a是数组首地址,a++当然数地址++了, 数组中一个元素占一个字节,理论上地址加一再获取该地址上的数值就是下一个元素,不是吗

使用特权

评论回复
10
yanghelovehuang|  楼主 | 2018-7-24 09:45 | 只看该作者
eydj2008 发表于 2018-7-24 08:12
这个问题 改编译器就可以了 ,你适合更高级的语言.
C的效率高 但是规则不少.  汇编的效率更高,规则更多.

就是说不是变量不能++吗?数组不是在连续的地址上存储的吗?既然a首地址代表的是a【0】的地址,a[0], a[1]的地址又相差一,所以a的地址加上一不就是a[1]的地址了吗?

使用特权

评论回复
评论
qinlu123 2018-7-26 14:57 回复TA
这是规则,就像语言中的语法一样,不能完全用逻辑来解释。 
11
yanghelovehuang|  楼主 | 2018-7-24 09:45 | 只看该作者
linqing171 发表于 2018-7-23 21:13
数组名不能作为++运算的左值。

那++a呢

使用特权

评论回复
12
yanghelovehuang|  楼主 | 2018-7-24 10:04 | 只看该作者
linqing171 发表于 2018-7-23 21:13
数组名不能作为++运算的左值。

那把数组以指针参数的形式传递给函数,是不是就能++了, 比如int  fsf(char *a)

使用特权

评论回复
13
airwill| | 2018-7-24 10:09 | 只看该作者
yanghelovehuang 发表于 2018-7-24 09:40
当然是地址了,a是数组首地址,a++当然数地址++了, 数组中一个元素占一个字节,理论上地址加一再获取该 ...

但是编译器不知道啊
如果地址增加, 是让编译器给数组安排的地址进行改变吗?  因为 a 是数组首地址的指针啊, 不管你怎么++, a 都是数组首地址哪.
这涉及数据移动了.

使用特权

评论回复
14
yanghelovehuang|  楼主 | 2018-7-24 10:23 | 只看该作者
airwill 发表于 2018-7-24 10:09
但是编译器不知道啊
如果地址增加, 是让编译器给数组安排的地址进行改变吗?  因为 a 是数组首地址的指针 ...

嗯嗯 谢谢您的回答,明白了,那把数组作为参数传给函数是不是就能++了,比如int  fsf(char *a。

使用特权

评论回复
15
linqing171| | 2018-7-24 12:23 | 只看该作者
yanghelovehuang 发表于 2018-7-24 10:04
那把数组以指针参数的形式传递给函数,是不是就能++了, 比如int  fsf(char *a) ...

int fsf(char*abcd)
{
abcd++;
}
是没有问题的。因为把数组的首地址这个常量 赋给了 一个指针变量。

使用特权

评论回复
16
李不走寻常路| | 2018-7-24 12:51 | 只看该作者
这里的a是数组的首地址(注意首地址是常量),而++(自增运算符)是针对变量的,所以你的程序中的a++会出错。以前我也遇到多你这个问题。

使用特权

评论回复
17
雪山飞狐D| | 2018-7-24 13:35 | 只看该作者
本帖最后由 雪山飞狐D 于 2018-7-24 13:39 编辑

  指针 *P++就行,一般也是这么用的,初始化为指针字符串    char * P="abcdefg" ;

使用特权

评论回复
18
yanghelovehuang|  楼主 | 2018-7-24 16:12 | 只看该作者
雪山飞狐D 发表于 2018-7-24 13:35
指针 *P++就行,一般也是这么用的,初始化为指针字符串    char * P="abcdefg" ;  ...

谢谢各位大神啊 谢谢

使用特权

评论回复
19
小小电子爱好者| | 2018-7-24 20:42 | 只看该作者
大家都好热心!刚看到帖子都这么多解答!轮不到我说了

使用特权

评论回复
20
caijie001| | 2018-7-24 20:46 | 只看该作者
这是一个常量字符串啊,定义在什么区我忘了,是不可以++的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

324

帖子

1

粉丝