int и ++ new каждый раз увеличивается на 2 - PullRequest
3 голосов
/ 03 февраля 2011

Просто глупый вопрос: у меня есть простой счетчик, но кажется, что он дает двойное значение того, что я ожидаю.

short int *new = 0;
++new;
NSLog(@"Items: %hi", new);

И это возвращает:

Предметы: 2

Относительно плохо знакомы с какао, и все еще прорабатывают мелкие детали, как это ясно видно выше ...

Ответы [ 3 ]

17 голосов
/ 03 февраля 2011

У вас нет целочисленной переменной, у вас есть указатель на целочисленную переменную (короткое целое, если быть точным).Он увеличивается на 2, потому что короткие целые числа имеют длину два байта.Переменная-указатель содержит адрес памяти другого значения.Увеличение указателя означает «сделать этот указатель указателем на следующую вещь в памяти», где «вещь» - это тип значения, на которое был объявлен указатель.Указатель на double будет увеличиваться на 8 каждый раз.

"*" в объявлении делает его указателем.Если вы просто хотите получить int, вы просто напишите

short int new = 0;
++new;
3 голосов
/ 03 февраля 2011

Ааа, когда вы увеличиваете указатель, увеличивая его на размер объекта, который он содержит.Вы смотрите на адрес, а не номер.

сделайте это и увидите:

short int *new = 0;
NSLog(@"Items now: %hi", new);
++new;
NSLog(@"Items then: %hi", new);
1 голос
/ 03 февраля 2011

Поскольку вы определяете new как указатель на целое число, *new.Вы задаете в ячейке памяти значение short int, представляющее собой 16-разрядное целое число, поэтому оно занимает два байта в памяти.Поэтому увеличение значения во второй строке означает увеличение объема памяти на 2.

Я не думаю, что вы намереваетесь иметь дело с областями памяти.Странно определять целое число, а также контролировать его местоположение в памяти, если только в определенных ситуациях.Код, который будет делать то, что вы хотите:

short int new = 0;
++new;
NSLog(@"Items: %hi", new);
...