gpt4 book ai didi

C++如何使用指向循环移位数组元素的指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:53 25 4
gpt4 key购买 nike

#include <iostream>
using namespace std;

void RotateLeft(unsigned char* in)
{
unsigned int* q= (unsigned int*)in;
*q = (*q >> 8)|((*q & 0xff) << 24);
}
int main() {
unsigned char temp[4] = {'a', 'b', 'c', 'd'};
RotateLeft(temp);
for (int i=0; i<4; i++) {
cout<<temp[i]<<endl;
}
}

输出是:b c d a。

你能解释一下这条线是如何工作的吗:

*q = (*q >> 8)|((*q & 0xff) << 24);

?

最佳答案

它只是引用指针,它返回一个 int,并对其执行所有位操作。它实际上与以下内容相同:

unsigned int val = *q;
val = (val >> 8)|((val & 0xff) << 24);
*q = val;

程序本身有未定义的行为。您不能通过 unsigned int* 指针访问 char 数组。它还假定 sizeof (unsigned int)4,数组在元素之间没有填充,并且 CPU 具有特定的字节顺序。

关于C++如何使用指向循环移位数组元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47316558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com