小编Gee*_*eta的帖子

为什么++(*p)没有给出l值所需的错误?

#include <stdio.h>
int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int *p = arr;
    ++*p;
    p += 2;
    printf("%d", *p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码没有给出任何编译时错误,我的疑问被++*p评估为++(*p)并且*p将是常量值1,当我们做++(1)的不是l值时,为什么编译器没有给出错误?

c arrays pointers lvalue

4
推荐指数
1
解决办法
149
查看次数

为什么这不会给出编译错误

#include <stdio.h>

int main()
{
    int i = 10;
    int *const p = &i;
    foo(&p);
    printf("%d\n", *p);
}

void foo(int **p)
{
    int j = 11;
    *p = &j;
    printf("%d\n", **p);
}
Run Code Online (Sandbox Code Playgroud)

p是指向变量x的常量指针,不能指向其他变量.但为什么我们不在这里得到错误,输出是11 11

c

1
推荐指数
1
解决办法
222
查看次数

标签 统计

c ×2

arrays ×1

lvalue ×1

pointers ×1