| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 632 人关注过本帖
标题:请教数组在函数调用时的问题
只看楼主 加入收藏
xdn666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-12
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
请教数组在函数调用时的问题
我的意思是想实现这样一个功能:
#include<stdio.h>
void f(int a);
void ff(int * a);
int main(void){
int a = 4;
int b = 5;
f(a);
ff(&b);
printf("a = %d\n",a);
printf("b = %d\n",b);
return 0;
}
void f(int a){

a = 1;
}
void ff(int * a){
*a = 1;
}
在单个数值上f函数可以直接调用a的值而不改变,但是第二个传入了指针,所以b会改变
我想怎样实现数组的传递而不改变其值,比如f的功能,但是数组作为函数的参数好像默认只能传入指针,所以值会被改变。
请问有什么办法可以实现
搜索更多相关主题的帖子: return 
2013-04-12 17:14
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:7 
既然你不想让它改变,那么你就不要用函数进行处理了啊!或者不处理,因为你如果用数组做参数,那么肯定是会改变的,你也可以借助中间变量进行,是函数调用该变量,而不调用数组

Maybe
2013-04-12 17:23
xdn666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-12
收藏
得分:0 
回复 2楼 邓士林
请问调用中间变量是什么意思?
2013-04-12 17:28
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
回复 3楼 xdn666
比如你可以用指针或者别的数组来存储你的原数组

Maybe
2013-04-12 18:15
xdn666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-12
收藏
得分:0 
回复 4楼 邓士林
请问您的意思是新建一个数组吗?
2013-04-12 18:46
YJ_Hao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:215
专家分:609
注 册:2013-3-22
收藏
得分:7 
看了,没弄明白LZ到底要干啥,你让它不改变它就不会改变,跟传地址和传值有什么关系?
2013-04-12 19:34
如蜗牛
Rank: 2
等 级:论坛游民
威 望:1
帖 子:40
专家分:42
注 册:2013-4-12
收藏
得分:7 
a不会改变,因为你传入参量时又开辟了一个新的空间;b会改变,因为你传入指针,那么函数体的操作就在开始开辟的那片空间上进行。所以,如果你想要传入数组而不改变其值,我认为,可以,一个一个参量逐一传入。虽然我也不明白楼主到底要问什么?不知回答对你是否有用。
2013-04-12 20:08
xdn666
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-4-12
收藏
得分:0 
因为算法本身需要在函数内生成一组值为0的数组,然后反复计算赋值,数组比较大,循环次数又比较多,所以我想每次是否需要很长时间来calloc我的想法是能否从外部直接调用main函数里定义的值为0的数组,这样计算速度会不会变快。
void function(double a[rxy],double R[rxy],double FR[rxy]){
    int p,q;
    double * cc;
    cc = (double*)calloc(rxy,sizeof(double));
    double * fr;
    fr = (double*)calloc(rxy,sizeof(double));
    for(p = 0;p <= Lx;++p){
        for(q = 0;q <=Ly;++q){
            for(int k = 0;k <= Lx - p;++k){
                for(int l = 0;l <= Ly - q;++l){
                       fr[p * (Ly + 1) + q] = a[k * (Ly + 1) + l] * a[k * (Ly + 1) + l + p * (Ly + 1) + q];
                      cc[p * (Ly + 1) + q] = cc[p * (Ly + 1) + q] + fr[p * (Ly + 1) + q];
                }
            }
            cc[p * (Ly + 1) + q] = cc[p * (Ly + 1) + q] - R[p * (Ly + 1) + q];
        }
    }
    for(int i = 0;i <= Lx;++i){
        for(int j = 0;j <= Ly;++j){
            FR[i * (Ly + 1) + j] = cc[i * (Ly + 1) + j];
        }
    }
    free(cc);free(fr);
}
就是我想把前几句的calloc在外部就定义好,然后作为参数传递给函数,而不改变其值,使得以后的函数调用还是初始化的数组。
2013-04-13 15:59
快速回复:请教数组在函数调用时的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019173 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved