赞
踩
在构造方法中,我们经常通过函数得到改变的或者新建的数组。但是使用return是无法成功返回的,如下:
- /**
- * Note: The returned array must be malloced, assume caller calls free().
- */
- double* convertTemperature(double celsius, int* returnSize){
- double ktem,htem;
- double ans[2];
- ktem=celsius+273.15;
- htem=celsius*1.80+32.00;
- ans[0]=ktem;
- ans[1]=htem;
- return ans;
- }
因为数组ans为局部变量 随着函数调用的结束,其中的各种局部变量也将被系统收回,所以无法正确返回数组值,可以采用以下方法:
方法一:使用数组指针,malloc分配动态空间。
- /**
- * Note: The returned array must be malloced, assume caller calls free().
- */
- double* convertTemperature(double celsius, int* returnSize){
- double* ans;
- ans=(double*)malloc(sizeof(double)*2);
- ans[0]=celsius+273.15;
- ans[1]=celsius*1.80+32.00;
- *returnSize=2;
- return ans;
- }
方法二:采用static关键字
- int* function(){
- static int str[5]={1,2,3,4,5};
- return str;
- }
当主函数中已经定义该数组可以直接返回,如:
- #include<stdio.h>
-
- void function(int str[],int len)
- {
- int i=0;
- for(i=0;i<len;i++){
- str[i]=str[i]+1;
- }
- }
-
- int main()
- {
- int str[5]={1,2,3,4,5};
- int len=5;
- function(&str,len);
- for(int i=0;i<len;i++)
- {
- printf("%d",str[i]);
- }
- return 0;
- }
方法一:使用数组指针,通过指针改变数组内容
- void function(int *str,int len)
- {
- for(int i=0;i<len;i++){
- *(str+i)=str[i]+1;
- }
- }
- int main()
- {
- int str[5]={1,2,3,4,5};
- int len=5;
- function(str,len);
- for(int i=0;i<len;i++)
- {
- printf("%d",str[i]);
- }
- return 0;
- }
方法二:使用&引用,引用数组直接带回数组值。
- #include<stdio.h>
-
- void function(int(&str)[5],int len)
- {
- int i=0;
- for(i=0;i<len;i++){
- str[i]=str[i]+1;
- }
- }
-
- int main()
- {
- int str[5]={1,2,3,4,5};
- int len=5;
- function(str,len);
- for(int i=0;i<len;i++)
- {
- printf("%d",str[i]);
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。