我是编码新手,我正在做一个在线活动,我不得不使用指针通过不同的功能来增加一个人的年龄。因此,在函数中,我尝试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(&john);
printf("Happy birthday! %s is now %d years old.n", john.name, john.age);
return 0;
}
++
运算符递增一个变量,也就是说,它计算一个递增的值并将其赋回同一个变量,而+
运算符只计算其操作数的总和(因此+
可以应用于常量,如3+7
,而++
不能)。
因此,当您尝试将p->age ++;
替换为单个加号时,您还需要显式执行分配:
p->age = p->age + 1;
另请注意,增量运算符++
存在于两个变体中,作为前递增:++ 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--
。
我已经签入了在线编译器
对我来说,下面的两行都有效。
p->age = p->age + 1;
p->age+=1;