- #include <stdio.h>
- int main()
- {
- unsigned int x = 100;
- unsigned int y = 1;
- int *p = &x;
- printf("x=%d\n", x);
- //printf("lalalala%n\n", p);
- printf("%.66u%n\n", y, p);
- printf("x=%d\n", x);
- return 0;
- }
代码片段 2
- #include <stdio.h>
- int main()
- {
- unsigned int x = 0;
- unsigned int y = 0;
- int *p = &y;
- printf("&x=%.8p, &y=%.8p\n", &x, &y); // y 地址比 x 地址大 4, 先定义的整型参数先入栈, 地址更高
- // printf("%.8p %.8p", p, (unsigned int*)p + 1); //(int)p+4);
- printf("x=%d, y=%d\n", x, y);
- printf("000%n000000%n\n", p, (unsigned int*)p + 1);
- printf("x=%d, y=%d\n", x, y);
- return 0;
- }
这是 64 位 Ubuntu 系统, 对 32 位系统, 代码中 (unsigned int) 应该改成(unsigned long). 因为 64 位系统 unsigned long 长度为 8 字节.
来源: http://www.bubuko.com/infodetail-3717171.html