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 不要同名