Проверка, если указатель больше 0? - PullRequest
0 голосов
/ 07 марта 2012

Я пытаюсь определить цель проверки, чтобы указатель был больше 0:

void someFunction(int *src) {
   int val = *src++;
   if( val > 0 ) {
       // Do something?
   }
}

Если тип данных указатель, не будет ли значение указателя всегда адресом памяти? Делает ли указательная арифметика что-то, что может установить val = 0?

Это простая проверка нулевого указателя?

Ответы [ 5 ]

4 голосов
/ 07 марта 2012

Это не проверка, если указатель больше нуля; он проверяет, больше ли указанное значение, чем ноль, и одновременно перемещает указатель на единицу. Вот некоторый эквивалентный код, который может помочь вам понять:

void someFunction(int *src) {
   int val = *src; // Dereferencing the pointer
   src++;          // Moving the pointer

   if( val > 0 ) {
       // Do something?
   }
}

val это просто int, а не указатель.

4 голосов
/ 07 марта 2012

Вы не проверяете, является ли указатель> 0, вы проверяете, является ли значение, содержащееся в указанном местоположении, больше 0. * Только 1001 * будет адресом, *src является значением, хранящимся в этом адрес.

4 голосов
/ 07 марта 2012

val не указатель;это int, и его значение получается путем разыменования src.

3 голосов
/ 07 марта 2012

Это не проверка указателя, это проверка целого числа.Оператор * разыменовывает указатель, получая значение, на которое в данный момент указывает указатель.Например, если src указывает на 0, val будет 0, а условие этого оператора if будет ложным.

0 голосов
/ 07 марта 2012

. Внимательно посмотрите на строку, которая доставляет вам неприятности:

int val = *src++;

Вы должны признать, что это оператор приращения постфикса, поэтому мы можем разделить эту строку на две части:

int val = *src;
++src;

На данный момент val имеет копию значения src , указывающего на при запуске функции;тем временем src сам теперь указывает на следующую ячейку памяти.

Здесь нет ничего, что проверяет, является ли указатель src нулевым, и его нулевое значение (или иное) не имеет отношения к тому, какое значение хранится вval.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...