#include "stdafx.h"
#include <string.h>
void test1 (int ¶m);
typedef struct
str2{
int c;
int d;
};
typedef struct
str1{
int a;
int b;
int c[10];
str2 teststr;
};
void structcopy(str1 ¶str);
void structcopy2(str1 *parastr);
int main(int argc, char* argv[])
{
int param1=0;
test1(param1);
int c=param1;
//strcopy
str1 resultstr;
structcopy( resultstr);//对应于void structcopy(str1 ¶str)形式
int stra= resultstr.a;
int strb=resultstr.c[1];
int str1str2c=resultstr.teststr.c;
//strcopy2 引用传值
/* str1 resultstr2;
structcopy2(&resultstr2);//对应于void structcopy2(str1 *parastr)形式
int stra2= resultstr2.a;
int strb2=resultstr2.c[1];
int str1str2c2=resultstr2.teststr.c;
*/
//strcopy2 指针传值
str1 *resultstr2;
resultstr2=NULL;//指针应用习惯1
resultstr2=new str1;//指针应用习惯2,必须要有,否则没有对象化的(分配内存空间的)指针在structcopy2中的 parastr->a= tempstr.a处报unhandled accession 错误。
structcopy2(resultstr2);//对应于void structcopy2(str1 *parastr)形式
int stra2= resultstr2->a;
int strb2=resultstr2->c[0];
int str1str2c2=resultstr2->teststr.c;
delete resultstr2;//指针应用习惯3,必须要有,否则内存泄露(长时间运行的话)
resultstr2= NULL;//指针应用习惯4
return 0;
}
void test1(int ¶m)
{
int b=9;
param=b;
// ¶m 为引用,是对你传入的地址里的变量赋值。也即对main函数中structcopy(resultstr)的resultstr赋值,下列赋值方法是错误的
//void a (word*param)
//{
//word b=9;
//param=&b;
//}
// b是局部变量,离开这个函数。就会消失了,用指针指向一个消失的地址,肯定得不到想要的结果
}
void structcopy(str1 ¶str)
{
str1 tempstr;
tempstr.a=1;
tempstr.b=2;
tempstr.c[0]=0;
tempstr.c[1]=1;
tempstr.teststr.c=10;
memcpy( ¶str, &tempstr,sizeof(tempstr));
}
void structcopy2(str1 *parastr)
{
str1 tempstr;
tempstr.a=1;
tempstr.b=2;
tempstr.c[0]=0;
tempstr.c[1]=1;
tempstr.teststr.c=10;
// memcpy( parastr, &tempstr,sizeof(tempstr));当两个结构体或数据元素相等时可以采用此法,若两个数据元素不等则采用下面的格式赋值
//注意指针结构体中变量的赋值方法
parastr->a= tempstr.a;
parastr->b=tempstr.b;
parastr->c[0]= tempstr.c[0];
parastr->teststr.c=tempstr.teststr.c;
}