int main(void)
{
int n1 = 2, n2 = 5;
int *p = &n1, *q = &n2;
*p = *(q++);
printf("%d,%d", *p, *q);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出= 5,5
为什么值为*q5它应该有一些垃圾值?
int main(void)
{
int n1 = 2, n2 = 5;
int *p = &n1, *q = &n2;
*p = *(++q);
printf("%d,%d", *p, *q);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出= 2,2
这是怎么回事?任何人都可以解释优先规则如何在指针中工作?
*p = *(q++);是(或多或少)相当于*p = *q; q++;,所以p很好.q++将被评估,产生旧值q(即值预增量).您所看到的是预期的行为.
你确实q在printf调用的deference中有未定义的行为,因为q不再指向你在那个点拥有的内存.一百万种不同的东西可能导致这种情况(例如,上次分配内存,可能是5,编译器太漂亮并试图帮助你等),但你不能也不应该依赖于这种行为.这样做很危险,而且这个程序很可能会在许多编译器/操作系统/硬件上崩溃或输出废话.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |