任何人都可以解释处理以下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编译。