Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 逐位递增指针_C++_C_Pointers - Fatal编程技术网

C++ 逐位递增指针

C++ 逐位递增指针,c++,c,pointers,C++,C,Pointers,我知道指针的增量是sizeof(type_I_am_using)返回的字节数。然而,还有什么方法可以让指针一点一点地递增呢?没有。字符是机器能处理的最小的东西。不过,您可以使用位操作遍历机器中的所有位。在C++中,你可以使用 STD::BuSETSE/COD>或 STD::向量< /代码>专门化,或位字段。< P>不。字符是机器能够处理的最小的东西。不过,您可以使用位操作遍历机器中的所有位。在C++中,你可以使用 STD::BuSETSE/COD>或 STD::向量专业化,或者BIT字段。 <

我知道指针的增量是sizeof(type_I_am_using)返回的字节数。然而,还有什么方法可以让指针一点一点地递增呢?

没有。字符是机器能处理的最小的东西。不过,您可以使用位操作遍历机器中的所有位。在C++中,你可以使用<代码> STD::BuSETSE/COD>或<代码> STD::向量< /代码>专门化,或位字段。

< P>不。字符是机器能够处理的最小的东西。不过,您可以使用位操作遍历机器中的所有位。在C++中,你可以使用<代码> STD::BuSETSE/COD>或 STD::向量专业化,或者BIT字段。

< P>大多数计算机体系结构不允许你处理单个位。例如,如果需要迭代一个位序列,则需要迭代字节(使用
char*
,或指向更大的无符号整数类型的指针),并通过位移位和位掩码操作提取位
(值>>x)&1
将从右侧提取索引
x
处的位<代码>值|=1大多数计算机体系结构不允许您处理单个位。例如,如果需要迭代一个位序列,则需要迭代字节(使用
char*
,或指向更大的无符号整数类型的指针),并通过位移位和位掩码操作提取位
(值>>x)&1
将从右侧提取索引
x
处的位<代码>值|=1指针不能逐位递增,因为字符是最小的可寻址内存量。这在语言规范中是强制性的。如果您需要开始查看各个位的内部,那么您很可能希望使用位移位/屏蔽操作

例如,要查看角色内部,可能需要执行以下操作:

bool get_bit_n(unsigned int n, char x){
    return (1 << n) & x
}
bool get\u bit\n(无符号整数n,字符x){

return(1指针不能逐位递增,因为字符是可寻址内存的最小数量。这在语言规范中是强制要求的。如果需要开始查找单个位,则很可能需要使用位移位/屏蔽操作

例如,要查看角色内部,可能需要执行以下操作:

bool get_bit_n(unsigned int n, char x){
    return (1 << n) & x
}
bool get\u bit\n(无符号整数n,字符x){
返回(1)
然而,有没有办法让指针一点一点地递增

如果你是说“逐字节”:否,因为存在一种称为对齐的方式。未对齐的地址不能是有效对象的地址,因此包含未对齐地址的指针无效。大多数具有无效指针的操作都会调用未定义的行为。例如,如果要访问标准布局类的数组子对象,其中该数组是第一个member,将指针投射到数组的元素类型并从那里开始工作。在您描述的内容中没有直接点

如果您的字面意思是“逐位”:有一些众所周知的方法,可以使用简单的
for
循环来迭代对象表示中的所有位

然而,有没有办法让指针一点一点地递增

如果你是说“逐字节”:否,因为存在一种称为对齐的方式。未对齐的地址不能是有效对象的地址,因此包含未对齐地址的指针无效。大多数具有无效指针的操作都会调用未定义的行为。例如,如果要访问标准布局类的数组子对象,其中该数组是第一个member,将指针投射到数组的元素类型并从那里开始工作。在您描述的内容中没有直接点


如果你的意思是“一点一点”有一种众所周知的方法,用一个简单的<代码>来迭代对象表示中的所有位,用于< /COD>循环。< /P>你是不是一个字节一个字节?你想做什么?如果你想在你的数据类型中间找到一个地址,你可以得到它,但是把它看作是指向一个数据类型项的指针有点不相干。如果要指向位而不是字节,这是不可能的。内存地址空间中没有位级别的解析。您可以创建一个用户定义的类型,该类型的行为类似于指针,并且可以逐位递增(尽管您想要什么样的语义尚不清楚).但我的猜测是,你不知道自己在做什么,并试图变得过于聪明,从而达到相反的效果。?这就像是在割草,但没有什么意义;)你是不是一个字节一个字节?你想做什么?如果你想在你的数据类型中间找到一个地址,你可以得到它,但是把它看作是指向一个数据类型项的指针有点不相干。如果你想指向一个比特而不是一个字节,那是不可能的。内存地址空间中没有位级别的分辨率。您可以创建一个用户定义的类型,该类型的行为类似于指针,并且可以逐位递增(尽管您想要什么样的语义尚不清楚).但我的猜测是,你不知道自己在做什么,并试图变得过于聪明,从而达到相反的效果。?这就像是在割草,但没有什么意义;)