我在代码中发现了以下语句,我并不完全理解:
UInt32 *pixels;
UInt32 *currentPixel = pixels;
UInt32 color = *currentPixel;
前两行对我来说很清楚,因为它们是UInt32对象,像素和currentPixel的定义。 但这句话对我来说没有意义。 为什么不是:
UInt32 *color = currentPixel
但
UInt32 color = *currentPixel
有什么不同?
如果我从currentPixel中删除*,我会收到消息: 指向整数转换的不兼容指针初始化' UInt32' (又名' unsigned int')表达式为' UInt32 *' (又名' unsigned int *');用*
取消引用取消引用*是什么意思?
谢谢
答案 0 :(得分:2)
// alloc height * width * 32 bit memory. pixels is first address.
UInt32 *pixels = (UInt32 *) calloc(height * width, sizeof(UInt32));
// you can do like this
UInt32 color = pixels[3]
// or like this, they are equal.
UInt32 color = *(pixels + 3)
指针就像一个数组,有时候。
有一个关于指针的教程: http://www.cplusplus.com/doc/tutorial/pointers/
UInt32不是一个对象。 它在32位机器上是无符号长的。 64位机器中的unsigned int。
有它的定义:
#if __LP64__
typedef unsigned int UInt32;
typedef signed int SInt32;
#else
typedef unsigned long UInt32;
typedef signed long SInt32;
#endif