内存打印问题
1 #include <stdio.h>2
3 int main()
4 {
5 int a = 0x12345678;
6 unsigned char *p = (unsigned char*)&a;
7 if (*p == 0x12)
8 printf("您的机器采用大端字节序。\n");
9 else
10 printf("您的机器采用小端字节序。\n");
11
12 printf("0x12345678 在内存中依次存放为:0x%2x 0x%2x 0x%2x 0x%2x\n", p, p, p, p);
13 printf("0x12345678 在内存中依次存放为:0x%2x 0x%2x 0x%2x 0x%2x\n", *(p++), *(p++), *(p++), *(p++));
14
15 return 0;
16 }
运行结果如图:
为什么会出现相反的打印结果呢?求大神指教!
具体我也不懂 可以看看这个https://fishc.com.cn/forum.php?mod=viewthread&tid=75394&extra=page%3D1%26filter%3Dtypeid%26typeid%3D571 不能这样连着写
#include <stdio.h>
int main()
{
int a = 0x12345678;
unsigned char *p = (unsigned char*)&a;
if (*p == 0x12)
printf("您的机器采用大端字节序。\n");
else
printf("您的机器采用小端字节序。\n");
printf("0x12345678 在内存中依次存放为:0x%2x 0x%2x 0x%2x 0x%2x\n", p, p, p, p);
//printf("0x12345678 在内存中依次存放为:0x%2x 0x%2x 0x%2x 0x%2x\n", *(p++), *(p++), *(p++), *(p++));
printf("0x12345678 在内存中依次存放为:");
printf("0x%2x ", *p++);
printf("0x%2x ", *p++);
printf("0x%2x ", *p++);
printf("0x%2x ", *p++);
puts("");
return 0;
}
人造人 发表于 2022-2-15 18:27
不能这样连着写
原来 printf 里面是从右往左计算的,感谢!!! 函数运行取参数是从右到左 岁寒青松 发表于 2022-2-16 10:31
原来 printf 里面是从右往左计算的,感谢!!!
这个计算顺序是不确定的,是未定义的,不同的编译器很有可能会给出不同的结果
$ gcc -g -Wall -o main main.c
main.c: In function ‘main’:
main.c:13:104: warning: operation on ‘p’ may be undefined [-Wsequence-point]
13 | printf("0x12345678 在内存中依次存放为:0x%2x 0x%2x 0x%2x 0x%2x\n", *(p++), *(p++), *(p++), *(p++));
| ~~^~~
main.c:13:104: warning: operation on ‘p’ may be undefined [-Wsequence-point]
main.c:13:104: warning: operation on ‘p’ may be undefined [-Wsequence-point]
$ ./main
您的机器采用小端字节序。
0x12345678 在内存中依次存放为:0x78 0x56 0x34 0x12
0x12345678 在内存中依次存放为:0x12 0x34 0x56 0x78
$ clang -g -Wall -o main main.c
main.c:13:90: warning: multiple unsequenced modifications to 'p' [-Wunsequenced]
printf("0x12345678 在内存中依次存放为:0x%2x 0x%2x 0x%2x 0x%2x\n", *(p++), *(p++), *(p++), *(p++));
^ ~~
1 warning generated.
$ ./main
您的机器采用小端字节序。
0x12345678 在内存中依次存放为:0x78 0x56 0x34 0x12
0x12345678 在内存中依次存放为:0x78 0x56 0x34 0x12
$ 岁寒青松 发表于 2022-2-16 10:31
原来 printf 里面是从右往左计算的,感谢!!!
warning: operation on ‘p’ may be undefined
warning: multiple unsequenced modifications to 'p'
页:
[1]