caoxwei2 2015-01-28 09:13 采纳率: 100%
浏览 1423
已采纳

求解答关于左值的问题。

编译器报错error C2105: '++' needs l-value,见源程序

(p+len-1)=(p+len-1)+1为什么不能用*(p+len-1)++代替呢?

#include <stdio.h>
int main()
{
    int a[10]={0};
    int len;
    int i;
    int *p=a;
    char *ptr2;
    char s[500];
    int sum =0;
    char *ptr;
    gets(s);
    ptr=s;
    while(*ptr!='\0')
    {
        while(*ptr<65 || (*ptr>90 && *ptr<97) || *ptr>122) 
        {
            ptr ++;
        }
        ptr2 = ptr;
        while((*ptr != ' ') && (*ptr !='\0'))
        {
            ptr ++;
        }
        sum++;
        len=ptr-ptr2;
        if(len<=10)
            *(p+len-1)=*(p+len-1)+1;        //使用*(p+len-1)++,编译器报错
    }
    printf("%d ",sum);
    for(i=0;i<10;i++,p++)
        printf("%d ",*p);

} 
  • 写回答

4条回答 默认 最新

  • oyljerry 2015-01-28 09:45
    关注

    *(p+len-1)++
    的语法你要先分析一下

    可以拆成:
    解引用p+len-1的值
    然后需要对指针加1,而这个时候这个指针p+len-1是一个右值,所以没法进行++

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding