关于函数的引用和值拷贝

先从例子说起  15:48:56

关于函数引用的例子

 1 #include<stdio.h>
 2 
 3 struct HString
 4  {
 5    char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL
 6    int length; // 串长度
 7  };
 8 
 9  void StrPrint(HString T) // 输出T字符串
10  {
11    int i;
12    for(i=0;i<T.length;i++) 13 printf("%c",T.ch[i]); 14 printf("\n"); 15  } 16 17 18 void InitString(HString &T) 19 { // 初始化(产生空串)字符串T。 20 T.length=5; 21 T.ch="hhhhh"; 22  } 23 24 void main() 25 { 26  HString T; 27 T.ch = "asdf"; 28 T.length = 4; 29  InitString(T); 30  StrPrint(T); 31 }

1、上边的例子中在代码的第18行中HString & T,此处加取地址符表示对 函数的引用。此时系统不会分配地址空间,只是在原来字符串的T引用了另一个名字,构成同一个内存区域有了两个名称,此时引用中改变内存区域中的值,输出内存区域的值会改变。输出结果会如下,会是初始化后的字符串值:

运行结果会输出:  hhhhh

                        Press any key to continue_

 

关于函数的值拷贝的例子

 1  
 2 #include<stdio.h>
 3 struct HString
 4  {
 5    char *ch; // 若是非空串,则按串长分配存储区,否则ch为NULL
 6    int length; // 串长度
 7  };
 8 
 9  void StrPrint(HString T) // 输出T字符串
10  { 
11    int i;
12    for(i=0;i<T.length;i++) 13 printf("%c",T.ch[i]); 14 printf("\n"); 15  } 16 17 void InitString(HString T)//初始化产生串T 18 { 19 T.length=5; 20 T.ch="hhhhh"; 21  } 22 23 void main() 24 { 25  HString T; 26 T.ch = "asdf"; 27 T.length = 4; 28  InitString(T); 29  StrPrint(T); 30 }

 

 2、上述例子中参看函数的值拷贝,与上边函数引用例子所不同的是第17行代码处HString T,此处是值拷贝。通过void Initstring(HString T)函数后,会在内存中重新分配一段内存空间来存储这段字符串

”hhhhh"。在运行主函数时,运行完28行此函数时,字符串会分配在系统分配的内存中,相当于一个副本,函数运行完时,系统为这个函数分配的内存会收回,这段字符串"hhhhh",可能就不存在了,因此原来分配内存空间中的T字符串"asdf"就不会改变。所以系统中输出字符串的T结果是如下:

 运行结果会输出: asdf   

                        Press any key to continue_

 

转载于:https://www.cnblogs.com/huihuidai/p/4542140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值