Я переписываю библиотеку фильтров частиц iOS в Swift из Objective C, которая доступна на Bitbucket, и у меня есть вопрос относительно синтаксиса Objective C, который я не могу понять.Синтаксис и использование Objective C "*"
Код выглядит следующим образом:
- (void)setRssi:(NSInteger)rssi {
_rssi = rssi;
// Ignore zeros in average, StdDev -- we clear the value before setting it to
// prevent old values from hanging around if there's no reading
if (rssi == 0) {
self.meters = 0;
return;
}
self.meters = [self metersFromRssi:rssi];
NSInteger* pidx = self.rssiBuffer;
*(pidx+self.bufferIndex++) = rssi;
if (self.bufferIndex >= RSSIBUFFERSIZE) {
self.bufferIndex %= RSSIBUFFERSIZE;
self.bufferFull = YES;
}
if (self.bufferFull) {
// Only calculate trailing mean and Std Dev when we have enough data
double accumulator = 0;
for (NSInteger i = 0; i < RSSIBUFFERSIZE; i++) {
accumulator += *(pidx+i);
}
self.meanRssi = accumulator/RSSIBUFFERSIZE;
self.meanMeters = [self metersFromRssi:self.meanRssi];
accumulator = 0;
for (NSInteger i = 0; i < RSSIBUFFERSIZE; i++) {
NSInteger difference = *(pidx+i) - self.meanRssi;
accumulator += difference*difference;
}
self.stdDeviationRssi = sqrt(accumulator/RSSIBUFFERSIZE);
self.meanMetersVariance = ABS(
[self metersFromRssi:self.meanRssi]
- [self metersFromRssi:self.meanRssi+self.stdDeviationRssi]
);
}
}
Класс продолжает с большим количеством коды и функциями, которые не являются важными и то, что я не понимаю, эти две линии
NSInteger* pidx = self.rssiBuffer;
*(pidx+self.bufferIndex++) = rssi;
Переменная PIDX инициализируются к размеру буфера, который был предварительно определен, а затем в следующей строке размер этого буфера и буфер плюс один равен переменной RSSI, которая передается в качестве параметра в функции.
Я предполагаю, что * имеет какое-то отношение со ссылкой, но я просто не могу понять цель этой линии. Переменная pidx используется только в этой функции для вычисления среднего среднего и стандартного отклонения.
Получите ваши старые книги С и C++ из. * используется для объявления указателей, указателей разыменования и умножения. Как и в C и C++. – gnasher729
Это фундаментальный материал C, и вы должны * знать основы C, прежде чем пытаться изучить Objective-C. В противном случае вы будете развивать всевозможные заблуждения. –