#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
Те же правила применяются к префиксному и постфиксному оператору декремента: --var
и var--
.
Ответ №2:
Я зарегистрировался в онлайн-компиляторе
И для меня обе приведенные ниже строки работают.
p->age = p->age 1;
p->age =1;
Комментарии:
1. В последнем примере вы использовали
=
оператора, когда ОП спрашивает обэтом в одиночку.