Why does my pointer for an unsigned long array increment by 8 bytes instead of four?
本问题已经有最佳答案,请猛点这里访问。
我有一个无符号长数组,我希望每个数组元素有4个字节(32位),如下所示:
1 | unsigned long giantbuffer[1024]; |
但是,当我打印出数组元素的地址时,我得到:
1 2 3 4 5 |
号
也,
1 | sizeof(giantbuffer) gives 8192, and sizeof(giantbuffer[0]) gives 8. |
每个数组元素8个字节!这是依赖于系统体系结构还是什么?我是C的新手,所以这可能是一件显而易见的事情?这严重破坏了我的指针算法。我正在使用"ch"对我的语法进行一些解释程序命令行样式的检查,等等。也许这是该程序的问题?
如果数据类型需要特定数量的字节,请不要使用像
而不是:
1 2 | unsigned long myvar = 0; unsigned long mybuf[100]; |
你会这样做:
1 2 | uint32_t myvar = 0; uint32_t mybuf[100]; |
无论你走到哪里,都会得到32位的值。
澄清:根据您的系统架构,
1 2 3 4 5 | #ifdef __x86_64__ typedef unsigned int uint32_t; #else typedef unsigned long uint32_t; #endif |
因为在您的环境中,
1 2 | int i = 10; int *p_i = &i; |
将
1 2 | char c = 10; char *p_c = &i; |
将
Is this something that is dependent on system architecture or something?
对。它还取决于编译器以及体系结构是否为32/64位。