c语言 - var++ 和 var+1 之间的区别



我是编码新手,我正在做一个在线活动,我不得不使用指针通过不同的功能来增加一个人的年龄。因此,在函数中,我尝试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

相同的规则适用于前缀和后缀递减运算符:--varvar--

我已经签入了在线编译器

对我来说,下面的两行都有效。

p->age = p->age + 1;
p->age+=1;

最新更新