有人能准确解释一下下面的 C 代码的作用吗?特别是第一行和迭代行?
int * p = &my_numbers[0];
int i;
int j = 0;
for (i = 0; i < 6; i++)
{
j += *(p + (i));
}
编译器 (GCC) 是否知道当我递增迭代器时,我的意思是 sizeof(int)/4 字节而不是 1 字节?每个编译器都一样吗?最初我使用的是:
j += *(p + (i * sizeof(int)));
但这给出了错误的答案:
j += *(p + (i));
确实给出了正确答案。
如果我只想增加一个字节,我必须写什么? (不知道为什么我想这样做,我想也许该语言的强类型性质允许我使用 char 来告诉编译器?)。
最佳答案
是的。在指针算术中,指针将根据所指向类型的大小进行调整。
如果您想要单字节指针算术,则必须使用 char*
和强制转换。但如果您真正处理的是 int
,则可能会遇到对齐问题。
关于C 代码迭代器按 sizeof(int) 而不是按字节递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15231370/