您的位置:首页 > 其它

结构体小结

2015-11-24 16:44 405 查看
好久没用C编程了,小结一下结构体,原来记得很明白的,现在都快忘光了。

结构体是指针的,形参,实参指向同一块地址,在任何地方更改结构体的内容都会导致内容的改变。

结构体是对象的,形参,实参指向不同的地址,在实参栈中改变数值大小不会对实参产生影响。

#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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: