【发布时间】:2014-11-07 08:01:05
【问题描述】:
#include <stdio.h>
int main() {
int op9=9;
int op99=99;
int op999=999;
int op9999=9999;
int *ptr1=&op9,*ptr2=&op99,*ptr3=&op999,*ptr4=&op9999;
*ptr1++;
++*ptr2;
(*ptr3)++;
*++ptr4;
printf("%d=ptr1 \t %d=ptr2 \t %d=ptr3 \t %d=ptr4",ptr1,ptr2,ptr3,ptr4);
printf("\n %d = *ptr++ \n %d = ++*ptr \n %d = (*ptr)++ \n %d = *++ptr",*ptr1,*ptr2,*ptr3,*ptr4);
printf("\n \n %d=ptr1 \t %d=ptr2 \t %d=ptr3 \t %d=ptr4",ptr1,ptr2,ptr3,ptr4);
return 0;
}
这是我得到的输出
-
209002336=ptr1 -209002344=ptr2 -209002348=ptr3 -209002348=ptr4
-209002348 = *ptr++
100 = ++*ptr
1000 = (*ptr)++
1000 = *++ptr4
-209002336=ptr1 -209002344=ptr2 -209002348=ptr3 -209002348=ptr4
为什么 *ptr++ 是 ptr1 指向 ptr3 的地址? 为什么*++ptr4的值1000是ptr3的值?
我认为 *ptr1++ 将指向下一个地址,因为它不是我程序的一部分,所以我预计程序会崩溃。同样,*++ptr4 也应该做同样的事情,因为它被评估为 *(++ptr4)。
那么对于 *ptr++ 和 *++ptr,增量和间接运算符究竟是如何工作的呢?
【问题讨论】:
-
完全荒谬的问题,除非它们是数组等,否则无法了解几个不同指针的内存位置。不适合这种情况,你看到的根本不是C相关的!!!
-
另外,要打印指针,我们使用
%u格式说明符! -
@shekharsuman:
%p用于打印指针,通常为十六进制。%u用于大小可能与指针大小不匹配的无符号整数。 (不过,您可能会选择%zu。) -
@MOehm-Ahh,我同意!我错过了,因为我有使用
%u的习惯,这显然在任何时候都可能不合适!谢谢...