2015-02-26 2 views
1

я нашел следующее утверждение в коде, который я не совсем понимаю:Objective C UInt32 Определение

UInt32 *pixels; 
UInt32 *currentPixel = pixels; 
UInt32 color = *currentPixel; 

Первые две строки для меня ясно, как эти определения объектов uint32, пикселей и currentPixel. Но линия после не имеет смысла для меня честно. Почему это не так:

UInt32 *color = currentPixel 

но

UInt32 color = *currentPixel 

Какая разница в этом?

Если я удалить * из currentPixel я получаю сообщение: Несовместимые указатель на целое преобразование инициализации «UInt32» (он же «неподписанных Int») с выражением типа «UInt32 *» (он же 'неподписанных INT *) ; разыменование с *

Что означает разыгрывание с * означает?

Спасибо

+0

Почему вы используете указатели здесь? 'UInt32' - это примитивный тип, а не тип класса. – rmaddy

+0

Исходный код: UInt32 * pixels; пикселей = (UInt32 *) calloc (высота * ширина, sizeof (UInt32)); – sesc360

+0

Код использует ее указатели ... и я не знаю, что назначает * currentPixel – sesc360

ответ

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-битной машине. unsigned int в 64-битной машине.

есть это определить:

#if __LP64__ 
typedef unsigned int     UInt32; 
typedef signed int      SInt32; 
#else 
typedef unsigned long     UInt32; 
typedef signed long      SInt32; 
#endif 
+1

Да .. это то, что я догадался .. Тем не менее я не понимаю, как UInt32 может получить назначенный указатель. И почему я пишу * currentPixel вместо текущегоPixel – sesc360

Смежные вопросы