C++ c++;传递包含指针的常量结构-如何在值之间移动?
有同样的效果。。常量似乎适用于不允许我修改其指针的结构,包括指针指向的值 我必须放下警钟吗?是否无法证明函数不修改数据 编辑:C++ c++;传递包含指针的常量结构-如何在值之间移动?,c++,function,pointers,struct,constants,C++,Function,Pointers,Struct,Constants,有同样的效果。。常量似乎适用于不允许我修改其指针的结构,包括指针指向的值 我必须放下警钟吗?是否无法证明函数不修改数据 编辑:PBYTE void someFunction(const PBYTEImage* inputImage) 在minwindef.h或windef.h 很抱歉没有提及此事 我必须放下警钟吗?是否无法证明函数不修改数据 实际上,函数确实更改了参数数据,因为您正在增加inputImage.pixels。 因此,您可能希望存储inputImage.pixels,并对其
PBYTE
void someFunction(const PBYTEImage* inputImage)
在minwindef.h
或windef.h
很抱歉没有提及此事
我必须放下警钟吗?是否无法证明函数不修改数据
实际上,函数确实更改了参数数据,因为您正在增加inputImage.pixels。
因此,您可能希望存储inputImage.pixels,并对其进行迭代
typedef unsigned char BYTE;
typedef BYTE near *PBYTE;
void someFunction(常量PBYTEImage和inputImage)
{
PBYTE pPixels=输入图像像素;
对于(无符号整数x=0;x
首先,for循环的退出条件中有一个输入错误:您已经编写了
void someFunction(const PBYTEImage& inputImage)
{
PBYTE pPixels = inputImage.pixels;
for (unsigned int x = 0; x < inputImage.width*inputImage*height;)
{
unsigned char y = *pPixels;
pPixels += 1;
}
}
但应该是这样
inputImage*height
除此之外,你还没有告诉我们PBYTE是什么,但是从这一行
inputImage.height
我想你在什么地方
unsigned char y = *(inputImage.pixels);
所以PBYTE是一个指针。表情
typedef unsigned char* PBYTE;
确实尝试增加指针,像素。由于像素是结构的一个成员,而结构是作为常量传递的,因此会出现错误。因此,是的,如果要保持结构不变并增加指针,必须在函数定义中删除常量。从将inputImage作为引用传递到将其作为指针传递也没有帮助
我必须放下警钟吗?难道没有办法证明
函数是否不修改数据
从常量的角度来看,您可能希望是安全的,因为您只是移动一个指针,而没有触及它所指向的数据:没错,但在这种情况下,指针本身就是您的数据,您正在尝试更改它。所以你的函数会修改数据。为什么不干脆
struct PBYTEImage{…}:
?什么是PBYTE
<代码>字符*?您可能还想更改for循环…是否使用其他指针PBYTE other=inputImage.pixels代码><代码>++其他代码>。当前您的循环无效,您\读取y
,对其不做任何操作。PBYTE
是指向一个字节(无符号字符)的指针@Ceris,为什么他需要说struct PBYTEImage{…}
?OP希望使用PBYTEImage
作为变量类型,而不是说struct PBYTEImage
作为变量类型。这并没有错,函数会修改数据,即结构中的指针。常量指针和指向常量数据的指针之间存在差异。是否必须在函数末尾释放pPixel?递增后不能使用pPixel释放内存,因为它需要指向完全相同的位置。所以要么减少ppixel,要么干脆释放inputImage.pixels。我希望我能早点看到这条评论,我一直在努力找出函数调用程序中的崩溃,因为指向像素的原始指针已被移动。。。由于inputImage.pixels是从调用者发送的,并且我正在使用指向它的指针,如果我在pPixels末尾这样做-=inputImage.width*inputImage.height;我还需要释放像素吗?PBYTE-pPixels=inputImage.pixels代码>不分配任何内存。它们都是变量(指针)。只要删除时保持内存的原始偏移量,就可以使用这两种方法释放内存。因此,如果要在迭代后使用pPixels释放内存,必须调用pPixels-=inputImage.width*inputImage.height代码>以防止崩溃。添加了对PBYTE的Microsoft引用,感谢您指出我的输入错误。是的,这也是我的理解,正如你所说的,我正试图找到在代码中传递我的结构的最佳方式,同时明确表示函数不会修改数据。
typedef unsigned char* PBYTE;
inputImage.pixels += 1;