190155801 发表于 2018-12-13 16:44:57

请求各位鱼油帮忙看一下

本帖最后由 康小泡 于 2018-12-14 11:29 编辑

#include<stdio.h>
#include<string.h>

StructStudent
{
intsid;
charname;
Intage;
};

intmain()
{
structStudentst={1000,“zhangsan”,20};
st.sid=99;   //第一种方式; 一般不用;

structStudent*pst;//第二种方式;
pst=&st;
pst->sid=99;   //pst->sid等价于(*pst).sid,而(*pst).sid等价于st.sid,
               所以pst->si等价于st.sid;
return0;

}

为什么这一种赋值方式不推荐呢?

ba21 发表于 2018-12-13 19:13:36

这得看情况呀;都会用得着。

第1种事先得分配足够的内存空间,声明的时候就分配好了。

第2种指针的方式更灵活些;可以需要的时候分配内存空间。如果你经常扩充,删除等等当然用第2种好

wwyy 发表于 2018-12-13 22:02:06

你现在写的是一个非常简单的例子,本地定义本地使用,两种方式没有任何区别。

如果结构体占用空间较大,在其他的函数中使用时,传递大的结构体会造成函数调用开销加大(需要将结构体全部压入栈中),同时如果在函数内部对传入的结构体进行修改,函数返回时,调用者空间内的变量值并未改变,得不到应有效果。

如果你使用的是C++而不是C,那么可以使用“引用”方式传递变量,效果与传递变量指针完全一致。
页: [1]
查看完整版本: 请求各位鱼油帮忙看一下