黑马程序员技术交流社区
标题: 求运行结果,并解释下为何值没变 [打印本页]
作者: 逆流瞅瞅 时间: 2015-5-17 22:41
标题: 求运行结果,并解释下为何值没变
- #include <stdio.h>
- typedef struct
- {
- int age;
- char *name;
- } Student;
- void test();
- int main()
- {
- Student mystu = {20, "jack"};
-
- test(mystu);
-
- printf("%d-%s\n", mystu.age, mystu.name);
-
- return 0;
- }
- void test(Student stu)
- {
- stu.age = 10;
- stu.name = "rose";
- }
复制代码
作者: ~缘~ 时间: 2015-5-17 23:18
#include <stdio.h>
typedef struct
{
int age;
char *name;
} Student;
Student test(Student stu);
int main()
{
Student mystu = {20, "jack"};
Student newstu = test(mystu);
printf("%d-%s\n", newstu.age, newstu.name);
return 0;
}
Student test(Student stu)
{
stu.age = 10;
stu.name = "rose";
return stu;
}
作者: 梦初醉 时间: 2015-5-18 00:54
求解,同问!
作者: 香草芭芙 时间: 2015-5-18 01:47
- #include <stdio.h>
- typedef struct {
- int age;
- char * name;
- } Student;
- void test();
- void test1(); // <---
- int main()
- {
- Student mystu = { 20, "jack" };
- test(mystu);
- test1(&mystu);// <---
- printf("%p\n", &mystu); // <---看内存就知道了 0x7fff5fbff838 , 传引用 & 传值的 区别...
- printf("%d-%s\n", mystu.age, mystu.name);
- return 0;
- }
- void test(Student stu)
- {
- printf("%p\n", &stu); // <---看内存就知道了 0x7fff5fbff810 , 传引用 & 传值的 区别...
- stu.age = 10;
- stu.name = "rose";
- }
- void test1(Student * stu) // <---想用方法直接修改就写成 这样...
- {
- printf("%p\n", &stu);
- (*stu).age = 10;
- (*stu).name = "rose";
- }
复制代码
作者: Emma 时间: 2015-5-18 09:46
函数调用时,会把实参赋值给形参,再函数里,你修改的只能是形参,它只是外面实参的拷贝体。
作者: mingjixiaohui 时间: 2015-5-18 16:59
形式参数不能改变实际参数,如果传的是地址,接收的是指针的可以改变实际参数
test1(&mystu); 取出地址 void test1(Student * stu) 传到形式参数中 (*)(stu.age)=10
假如:mystu的地址是ffc1 存储空间的值为20
(*)(stu.age)的地址指向的空间就是mystu的存储空间
将10赋值给它,也就改变了mystu的存储空间把20改变成了10
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |