|
楼主 |
发表于 2019-8-13 14:08:20
|
显示全部楼层
本帖最后由 四十不环 于 2019-8-13 14:18 编辑
怎么说呢,还是要看编译器,在gcc g++编译器,我试了一下,在函数的形参加入static是会报错的,
在vc2010中虽然能通过编译就会出现上述我说的情况
#include <stdio.h>
#include <string.h>
#include <Windows.h>
struct programer {
char name[16];
int age;
int salary;
};
struct programer* add_salary4(struct programer p, int num) {
static struct programer *p1;
static struct programer p2;
p2 = p;
p1 = &p2;
p2.salary += num;
printf("p = %p, p2 = %p\n", p2, p2);
printf("被调用函数内部 -> 姓名:%s, 年龄:%d, 薪水:%d\n", p1->name, p1->age, p1->salary);
return p1;
}
/*
//函数的形参不允许使用static,static只能使用在函数体的局部变量中
struct programer* add_salary4(static struct programer p, int num) {
static struct programer *p1;
p1 = &p;
p1->salary += num;
printf("被调用函数内部 -> 姓名:%s, 年龄:%d, 薪水:%d\n", p1 -> name, p1 -> age, p1 -> salary);
return p1;
}
*/
void age_t(int *p) {
*p = 29;
}
int main(void) {
struct programer xiaoniu;
struct programer *p2;
strcpy_s(xiaoniu.name, "小牛");
xiaoniu.age = 28;
xiaoniu.salary = 20000;
age_t(&xiaoniu.age);
p2 = add_salary4(xiaoniu, 10000);
printf("main函数 -> 姓名:%s, 年龄:%d, 薪水:%d\n", p2->name, p2->age, p2->salary);
system("pause");
return 0;
}
这个是我调整后的代码,在gcc g++上能通达编译,并且在VC VS中不会出现乱码,所以我才得出那个结论 |
|