CGPoint* points;
CGPoint a = CGPointMake(50,50);
int i;
for (i=0; i<100; i++,points++) {
a = CGPointMake(i,i);
points = &a;
}
NSData *data = [NSData dataWithBytes:&points length:sizeof(*points)];
Неправильный код.
(1) Вам нужен массив точек. Простое объявление CGPoint* points;
не создаст массив точек, только неинициализированный указатель CGPoint. Вам нужно выделить место для массива либо с помощью
CGPoint points[100];
или
CGPoint* points = malloc(sizeof(CGPoint)*100);
Не забудьте free
очки, если вы выберете способ malloc
.
(2) Чтобы скопировать значение в содержимое указателя, вам необходимо использовать
*points = a;
Но я предлагаю вам оставить указатель points
неизменным в цикле, так как вы собираетесь использовать его позже. Используйте синтаксис массива points[i]
.
(3)
sizeof(*points)
Поскольку *points
- это всего лишь один CGPoint, поэтому размер всегда равен 8 байтам. Вам нужно умножить результат на 100, чтобы получить правильную длину.
(4)
[NSData dataWithBytes:&points ...
points
уже является указателем на фактические данные. Вам не нужно брать адрес этого снова. Просто пройдите points
напрямую.
Итак, окончательный код должен выглядеть так:
CGPoint* points = malloc(sizeof(CGPoint)*100); // make a cast if the compiler warns.
CGPoint a;
int i;
for (i=0; i<100; i++) {
a = CGPointMake(i,i);
points[i] = a;
}
NSData *data = [NSData dataWithBytes:points length:sizeof(*points)*100];
free(points);