IDE:VS2019
直接拷贝你的源代码
代码1#include <stdio.h>
#include <string.h>
#include <Windows.h>
struct programer {
char name[16];
int age;
int salary;
};
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;
}
运行乱码
在add_salary4里下断点
&p:0x10ffbc8
&num:0x10ffbe0
所以这个加了static的static struct programer p和没加的int num一样都是在栈里的
代码2struct programer* add_salary4( [b]static struct programer & p[/b], int num) {
static struct programer* p1;
p1 = &p;
p1->salary += num;
printf("被调用函数内部 -> 姓名:%s, 年龄:%d, 薪水:%d\n", p1->name, p1->age, p1->salary);
return p1;
}
把p改为引用,结果正确。
不知道你的结论怎么得出的,可能是编译器差别 ? |