在C中使用指针增量和解除引用来完成赋值的顺序是什么?

时间:2016-04-16 00:24:24

标签: c pointers binding variable-assignment

任何人都可以解释处理以下C语句的顺序是什么?:

char *p = malloc(1);
*p++ = argv[1][0];

T min_value = *begin++; from here之类的处理顺序很明确,但如果指针增量和取消引用位于我的作业的左侧,那么时间顺序是多少?我知道++的运算符绑定优先级高于*(解除引用)。这是否意味着指针在赋值argv[1][0]之前递增?

帕特里克

我找到了答案,我的测试代码:

#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
    char *start;
    char *buf = malloc(2);
    start = buf;

    printf("Start of reserved memory: %p\n", buf);
    buf[0] = 3;
    printf("First char 3 at: %p\n", &buf[0]);
    buf[1] = 4;
    printf("Second char 4 at: %p\n", &buf[1]);
    printf("'buf' address: %p\nDo assignment '*buf++ = 7'\n", buf);
    *buf++ = 7;
    printf("Content of %p: %d\n", &start[0], start[0]);
    printf("Content of %p: %d\n", &start[1], start[1]);

return 0;
}

结果是:

Start of reserved memory: 0x1672010
First char 3 at: 0x1672010
Second char 4 at: 0x1672011
'buf' address: 0x1672010
Do assignment '*buf++ = 7'
Content of 0x1672010: 7
Content of 0x1672011: 4

所以我假设*buf++ = 7以这种方式处理:

*buf = 7;
buf++;

而不是

buf++;
*buf = 7;
由于操作员绑定优先级,可以假设

。 我用gcc 5.3编译。

0 个答案:

没有答案