Разница между var и var 1

#c #struct

Вопрос:

Я новичок в программировании и занимался онлайн-активностью, где мне приходилось использовать указатели для увеличения возраста человека с помощью другой функции. Поэтому в функции, которую я пытался age 1 использовать вместо age (возраст-это часть структуры), и она показывалась неправильно. Может ли кто-нибудь сказать мне, почему это неправильно? Вот код, который я написал —

 #include <stdio.h>

typedef struct {
  char * name;
  int age;
} person;

/* function declaration */
void birthday(person * p);

void birthday(person * p){
    p->age  ; // This is the same.. 
    //(*p).age  ; // ... as this would be
}

int main() {
  person john;
  john.name = "John";
  john.age = 27;

  printf("%s is %d years old.n", john.name, john.age);
  birthday(amp;john);
  printf("Happy birthday! %s is now %d years old.n", john.name, john.age);

  return 0;
}
 

Комментарии:

1. var приращения var . var 1 не. Вы должны показать код, который не работал.

2. возраст 1 просто возвращает значение возраста плюс 1, но не изменяет переменную. возраст или возраст =1 измените переменную. Было бы полезно, если бы вы более четко написали, что вы имеете в виду, говоря «это было неверно». Я предполагаю, что вы не получили того результата, которого ожидали. И , пожалуйста, удалите тег function-pointers , это не имеет к этому никакого отношения 🙂

Ответ №1:

Оператор увеличивает переменную, то есть вычисляет увеличенное значение и присваивает его той же переменной, в то время как оператор просто вычисляет сумму своих операндов (следовательно , может применяться к константам , например 3 7 , и не может).

Поэтому, когда вы пытаетесь p->age ; заменить одним плюсом, вам также нужно явно выполнить назначение:

 p->age = p->age   1;
 

Имейте также в виду, что оператор приращения существует в двух вариантах: до приращения: var и после приращения: var . Они оба увеличивают переменную, но первый возвращает увеличенное значение, в то время как второй возвращает значение до увеличения. Примеры:

var:

     int var, res;
 
    var = 5;
    res =    var;
    printf( "var: %d, res: %dn", var, res);
 

выходы

 var: 6, res: 6
 

var :

     int var, res;
 
    var = 5;
    res = var   ;
    printf( "var: %d, res: %dn", var, res);
 

выходы

 var: 6, res: 5
 

https://ideone.com/7i86Dj

Те же правила применяются к префиксному и постфиксному оператору декремента: --var и var-- .

Ответ №2:

Я зарегистрировался в онлайн-компиляторе

И для меня обе приведенные ниже строки работают.

 p->age = p->age   1;

p->age =1;
 

Комментарии:

1. В последнем примере вы использовали = оператора, когда ОП спрашивает об этом в одиночку.