结构体小结
2015-11-24 16:44
405 查看
好久没用C编程了,小结一下结构体,原来记得很明白的,现在都快忘光了。
结构体是指针的,形参,实参指向同一块地址,在任何地方更改结构体的内容都会导致内容的改变。
结构体是对象的,形参,实参指向不同的地址,在实参栈中改变数值大小不会对实参产生影响。
有些疑问的是,定义结构体之后,使用typedef定义结构体对象和结构体指针时,实参和形参都指向同一块地址。。。。
指针函数的另一种方法:
结构体是指针的,形参,实参指向同一块地址,在任何地方更改结构体的内容都会导致内容的改变。
结构体是对象的,形参,实参指向不同的地址,在实参栈中改变数值大小不会对实参产生影响。
#include <iostream> using namespace std; typedef struct { int a; int b; }StrObject,*StrPointer; // void Change(StrObject st) { st.a=99; } void Change2(StrPointer P) { P->a=99; } int main() { StrObject Obj; Obj.a=1; Obj.b=2; Change(Obj); cout<<"结构体指针 内容指向不同地址 数值没有发生改变 :"<<Obj.a<<endl; StrPointer P; P->a=1; P->b=2; Change2(P); cout<<"结构体指针 内容指向同一块地址 数值发生改变 : "<<(P->a)<<endl; }
有些疑问的是,定义结构体之后,使用typedef定义结构体对象和结构体指针时,实参和形参都指向同一块地址。。。。
#include <iostream> using namespace std; struct Start { int a; int b; }; typedef Start *P,P2; Start* TextPointer(Start *St); Start TextObject(Start St); int main() { P A,B; // 指针 A->a=1; A->b=2; //B=A; // cout<<(B->a)<<" "<<(B->b)<<endl; P2 C,D; // 实参 C.a=1; C.b=2; //D=C; // cout<<D.a<<endl; TextPointer(A); TextObject(C); cout<<(A->a)<<endl; cout<<(C.a)<<endl; } Start* TextPointer(Start *St) { // cout<<St->a<<endl; // cout<<St->b<<endl; St->b=8; return St; } Start TextObject(Start St) { // cout<<St.a<<endl; // cout<<St.b<<endl; St.b=8; return St; }
指针函数的另一种方法:
#include <iostream> using namespace std; typedef void (*Fuc)(void *pare); //定义指针函数 Fuc FucArg[10]; //声明指针函数数组 void A(void *pare){ cout<<"A"<<endl; } void B(void *pare){ cout<<"B"<<endl; } int main() { FucArg[0]=A; FucArg[1]=B; FucArg[0](NULL); // 调用指针函数 FucArg[1](NULL); }
相关文章推荐
- 粒子群算法(三)局部版本
- 解决误删datafile导致数据库无法启动的问题
- spring4+tomcat8+jdk8应用websocket
- Eclipse创建简单helloworld的servlet小程序
- LeetCode:Count and Say
- MyBatis增删改查
- 关于HADOOP HA 中DFSZKFC的理解
- 212
- Eclipse HibernateTools安装
- 海尔电脑U盘重装系统win7步骤图文教程
- 推进存储池化!浪潮推出业界首款基于SAS协议的交换式存储池(基于PMC技术)
- JSON 之 SuperObject(1)
- 通过 trace文件 备份控制文件controlfile
- Android apk反编译
- 关于AndroidAnnotations取消后台任务的方法
- 浏览器判断兼容IE
- cocosjs 触摸
- MapReduce编程实例之数据去重
- java.lang.noclassdeffounderror:com/mchange/v2/ser/Indirector
- gifflen 在出现 b = (((*p)) & 0xff) << netbiasshift; 问题时的解决办法