Struct 与 Class 的 小小关联与类比
分类:
文章
•
2025-04-20 21:55:34
结构数据(struct )作为参数传递【与C++的 class 类 相仿】
注意,依旧是简单的单向的值传递;
除了值的传递以外,还可以进行结构的返回。
但是:系统仍旧是新开辟一个空间,与原空间不一样。
单向值传递:eg: void getpoint (struct point p){ scanf("%d",&p.x); printf("%d",p.x);}
【main 函数中,将q传递给p,这个时候,开辟一个新空间,并不指向原空间q。对于输入的值,再输出时,是输出p.x的值,但未改变q.x的原来的值。】,所以,若再输出q.x,结构依旧为0。
void(main){ struct point q={0,0}; getpoint(q);}
需要注意:若需要指向同一个空间,要用到C++中的独立应用或者 形参变为*p(指针形式)。这个时候注意,当形参变为指针形式的时候,传递的实参的形式要有所改动,eg: void(main){ struct point p, r; r=sumpoint(&p);
加了“&” 符号,相当于传递了地址。
返回一个结构: eg: #include<stdio.h> struct point {int x; int y;};
声明函数: struct point sumpoint (struct point p1, struct point p2){struct point q; q.x=p1.x+p2.x; return q; } int main(){struct point pp1={1},pp2={2};pp3; pp3=sumpoint (pp1,pp2);
【注意:在调用sumpoint函数的时候,是返回一个结构q,而在main 函数中,pp3=q,相当于一个简单的拷贝,所以,在输出pp3.x的值的时候,就是输出 q.x的值】
这里需要注意一个点:有两个结构的传递:sumpoint(struct pont p)【第一个】,在sumpoint 函数前,加了 struct point 这个“名”。【第二个】
而这特点和后续的C++ class 类 是一样的。
在传递结构的过程,是传递首地址。
共用体结构【注意概念】
形式和在main函数中的说明都和 struct 函数一样【包括引用方式也一样】
注意点:1.所有成员共享一个空间;2.同一个时间只有一个成员是有效的;3.只可以初始化第一个成员;
只可以初始化第一个成员: union data a={12};✔ union data a={12,10} ❌;
a.i=1;a.ch="xiaoming";a.f=1.5 最终的结果输出只有a.f 的值 1.5。
因为: 共用体变量和他的成员公用一个地址
同理,也不可以整体赋值; a=.... ❌
微信公众号:晓白资源
