C++中指针、引用、结构体传值解析

#include "stdafx.h"
#include <string.h>

void test1 (int &param);

typedef struct
 str2{

int c;
int d;

};
typedef struct
 str1{

int a;
int b;
int c[10];
str2 teststr;

};


void structcopy(str1 &parastr);
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 &parastr)形式
 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 &param)
{
  int b=9;
   param=b;

   // &param 为引用,是对你传入的地址里的变量赋值。也即对main函数中structcopy(resultstr)的resultstr赋值,下列赋值方法是错误的
   //void a (word*param)
   //{
   //word b=9;
   //param=&b;
   //}
   // b是局部变量,离开这个函数。就会消失了,用指针指向一个消失的地址,肯定得不到想要的结果

}


void structcopy(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));
}

 

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;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值