问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言 关于全局变量问题 50分

发布网友 发布时间:2023-09-23 01:47

我来回答

6个回答

热心网友 时间:2024-12-04 20:12

因为你的 int *pf(int x[], int n)函数返回的是数组指针,如果k定义为局部的话,等函数返回后,k已经销毁了,所以结果不正确,如果非要定义成局部的话,那么用malloc分配内存即可。
1. 加头文件#include <malloc.h>
2. 在int *pf(int x[], int n)函数中添加int *k = (int *)malloc(MAX * sizeof(int)) ; 即可

int *pf(int x[], int n)
{
int *k = (int *)malloc(MAX * sizeof(int)) ;

int m;
int j[]={100, 200, 300, 400, 500};
for(m=0; m<n; m++) {
k[m]=j[m]+x[m];
printf("k[%d]=%d\n", m, k[m]);
}
printf("k=%x\n", k);
return k;
}

热心网友 时间:2024-12-04 20:12

因为在main和pf两个函数中都用到了这个数组k,所以k[MAX]必须是全局变量

如果把它定义为局部的,则在其它函数中无法访问;两个函数中各自定义一个k数组,那么这样的两个k数组时完全不一样的。

原题中的两个函数中使用的k数组都是同一个,所以必须是全局的。

热心网友 时间:2024-12-04 20:13

加头文件#include <malloc.h>然后在int *pf(int x[], int n)函数中添加int *k = (int *)malloc(MAX * sizeof(int)) 开空间

热心网友 时间:2024-12-04 20:13

这是为了便于pf()函数的调用,定义为全局变量,就不用通过参数将k传入pf()函数了,可以直接在main()函数和pf()函数中引用这个数组,定义为局部变量也可以,不过pf()函数就要多一个参数来接收这个指针了,如下:

//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
int *pf(int [], int,int *); /*注意这里*/
#define MAX 5

int main()
{
int total=0, k;
int K[MAX]={0}; /*注意这里*/
int i[MAX]={10, 20, 30, 40, 50};
int *ptr;
ptr=pf(i, MAX,K); /*注意这里*/
printf("ptr=%x\n\n", ptr);

printf("Sum of (\n");
for(k=0; k<MAX; k++) {
printf("k[%d]=%d \n", k, *(ptr+k));
total += *(ptr+k);
}
printf(") is %d\n", total);
getch();
return 0;
}

int *pf(int x[], int n,int *k) /*注意这里*/
{
int m;
int j[]={100, 200, 300, 400, 500};
for(m=0; m<n; m++) {
k[m]=j[m]+x[m];
printf("k[%d]=%d\n", m, k[m]);
}
printf("k=%x\n", k);
return k;
}

//---------------------------------------------------------------------------

热心网友 时间:2024-12-04 20:14

“全局”者,全局也!(=_=!!)
局部变量的生命周期仅限于它声明所在的函数体 出现右大括号 "}"之前。
而全局变量则使得其至少在整个文件中的任何地方任何函数 都可以使用。
这是全局变量的需求。

很明显,你的函数意图就在此:main函数 和pf 都要使用,所以要声明为全局。

热心网友 时间:2024-12-04 20:15

说明两点:

1 局部在函数pf里不行。因为数组k 等到函数调用完毕,就撤销了,被删。

2 局部在main函数

int total=0, k;

int k[MAX]; //int的k 和 数组k 不要同名
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
妇科的止血药有哪些 妇科用的止血药有哪些 妇科止血药的功效 人艰不拆是啥意思 汉酱51 度酱香型白酒多少钱?味道怎么样? 穿凉鞋可以穿袜子吗?凉鞋发黄怎么变白? 爱奇艺vip投屏限制怎么办 爱奇艺vip投屏视频限制怎么解决 支付宝怎样解除关联的支付宝账号? 剑圣叫什么名字 ...政策?这个政策的目的是什么?会对经济有什么影响? c++定义全局变量后在子函数中的值改变了但是在主函数中的值还是0 一个问题:为什么我的函数中使用全局变量运行时没赋值。。。求解答啊... 全局变量a在调用子函数后为什么没有变化 电吹管十大名牌? 有关日出的诗句? 近战法师动漫几月几日上线? 租银行卡犯法吗不知情情况 有没有男主无敌的,专一的;没有女主或者就一个的,女主不要太花痴的小说... 求男主专情,一对一的网游小说。 问问这是什么鱼 瞬时速度67km-71km属于超速吗? 火车票67到71连吗,是在一起吗 退回微信转账的操作方式 物质为什么具有质量,质量又从何而来? 被蛇咬到了,去医院注射血清,才注射一会儿,过敏了,不能打了,血清费用能... 被毒蛇咬伤右脚,现正在医院,但是对血清过敏,现已肿到小腹了,请问有什么... 打血清过敏怎么办 被蛇咬到,打了一支血清.过了几天身上起了好多红点点.什么原因? 车子越开油耗越大,换什么零件可以降低油耗 描写九月诗词 湖南南华大学录取分数线 家中养的秋田犬把乌龟吃了好吗? 汉字“橇”的意思是什么橇字怎么写 工商银行给小孩办的社保卡可以用中国银行缴费吗 大家帮我儿子起个名字吧,要有钅旁 姓周 带水旁或带金旁姓蒙的男孩名字 红楼梦的结局是凄美还是凄惨? 玉米提前扒皮对玉米有影响吗? 是新疆的籽料玉吗师傅? 任何植物会不会睡觉? 信用卡没刷够次数可以销卡吗销完卡需要注意哪些事情 wow多少级可以无限绢布?40多50多 还是60? 魔兽世界捐布的问题?拜托各位了 3Q 现在魔兽世界是不是不能无限捐符文布了?那我该怎么刷奥格瑞玛声望到崇拜... wow为什么我不能一直捐布 捐布有前制任务?为什么我不能无限捐? 楚雄附近的Android开发培训机构哪家比较正规? 如何挑选合适的办公椅?圣奥社交化办公空间成新宠 河南信阳潢川县附近有什么好玩的 潢川火车站的如意饭店好不好?