C 此代码有什么问题,可以';我不能把指针和一个无符号值加在一起吗?

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); /

测试平台是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);  // 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。您期望的值是什么,实际看到的值是什么?