C 此代码有什么问题,可以';我不能把指针和一个无符号值加在一起吗?
测试平台是Linux 32位 我在我的代码中发现了一个bug,我不知道为什么 我简化了此代码并将其放在这里:C 此代码有什么问题,可以';我不能把指针和一个无符号值加在一起吗?,c,pointer-arithmetic,C,Pointer Arithmetic,测试平台是Linux 32位 我在我的代码中发现了一个bug,我不知道为什么 我简化了此代码并将其放在这里: unsigned int aa = 0; unsigned int array[10000]; unsigned int* ptr = array + 2000; printf("aa: %d ", aa); // value 1 printf("ptr: %d \n", ptr); //value 2 printf("aa+ptr: %d \n", aa + ptr); /
unsigned int aa = 0;
unsigned int array[10000];
unsigned int* ptr = array + 2000;
printf("aa: %d ", aa); // value 1
printf("ptr: %d \n", ptr); //value 2
printf("aa+ptr: %d \n", aa + ptr); // value 3
编译器是gcc版本4.6.3
看起来很傻,但是
我不明白为什么value3!=值1+值2
谁能给我一些帮助吗
谢谢大家! 在第二种和第三种情况下,您将传递一个指向printf的指针,但使用%d作为格式化程序。你需要%p
int和指针是不能互换的。但在32位Linux上,
sizeof(int)==sizeof(void*)
。使用%d
打印指针在很大程度上是无用的,但这仍然可以正常工作。在cygwin(32位)中,使用gcc版本4.8.2(gcc)
,我得到了预期的输出:aa:0 ptr:2633512 aa+ptr:2633512
。您是否发布了您的实际代码?此外,当您使用指针时,它可能有助于确保您了解如何工作。基本上,将一个指针添加到下一个“元素”,将指针的值增加sizeof(*p)
bytes。您期望的值是什么,实际看到的值是什么?