c语言如何将数组作为全局变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言如何将数组作为全局变量相关的知识,希望对你有一定的参考价值。

具体是要求出一个“完数”(约数之和等于自己,约数不包括自己),输出这个数并且输出约数。如6=1+2+3;想将约数作为全局变量,这样实际上可以用被调函数返回好几个值。可是有问题。问题是

3 D:\Dev-Cpp\Temp\完数.c declaration for parameter "a" but no such parameter #include<stdio.h>
int main()
int a[100];
int i,y;
int yue(int n);
for(i=1;i<=1000;i++)
y=yue(i);
if(y==i) printf("%d\n",i);for(i=0;i<=100;i++)printf("a[i]*");
system("pause");

int yue(int n)
int i,sum=0,j=0,a[100];
for(i=1;i<=n/2;i++)
if(n%i==0)sum=sum+i;a[j++]=i;
return(sum);

在c语言中,全局变量和函数声明及定义并列,也就是说,声明在最外层作用域的变量即为全局变
如在如下程序中
int i;
int main()

int i_copy = i;
i = 9;
return 0;

int
i就是一个全局变量,故在main函数中可以调用或修改i的值
所以,定义数组也和普通全局变量的方法相同,如
char str[10];
int main()

str[0] = 'a';
str[1] = '\0';
return 0;

拓展资料
c语言是一门通用计算机编程语言,应用广泛。c语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管c语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的c语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称mcu)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的c语言语法产生差异,由美国国家标准局为c语言制定了一套完整的美国国家标准语法,称为ansi
c,作为c语言最初的标准。目前2011年12月8日,国际标准化组织(iso)和国际电工委员会(iec)发布的c11标准是c语言的第三个官方标准,也是c语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
参考技术A c语言中全局变量的定义为:在一个函数之外定义,从定义位置开始到源程序最后都有效的变量,可见如果将数值在函数之外申明就可以叫全局变量,如果要使该全局变量在所有程序段都有效,必须定义在主程序的最开始位置。 参考技术B 把数组在任何一个函数外定义即可。
所以把int a[100];放到main()函数上面就行了。追问

是的,这样就不会有编译错误了(上面纯属失误)。但是却变成了死循环。能帮助一下吗??

追答

int yue(int n)好像没必要在main()函数中定义,程序可以自己调用。
printf("a[i]*")改成printf("%d*",a[i])
我是这样想的,由于每个数的约数的个数不同,所需要printf的a[i]个数也不一样,所以可以选择用一个全局变量int m=0去记录,在函数int yue(int n)中赋值为0。输出循环用只需循环m次。试下看看。
保险起见,还可以先将a[100]数组赋个初值0。

追问

#include
int a[100],k;
int main()
int i,y,j;
int yue(int n);
for(i=1;i<=1000;i++)
y=yue(i);
if(y==i) printf("%d==\n",i);for(j=0;j<=k;j++)printf("%d*",a[j]);printf("\n");

system("pause");
已经找到错误的地方。找一个值记录j不是关键的错误。关键是输出数组循环中,不能再用i了。i是大循环中的变量。

追答

。。。好吧,这还真没注意看,疏忽了,从没想过这个会错。

本回答被提问者采纳

c语言如何通过函数来改变已经赋初值的全局变量的值?

定义全局变量并赋初值,如何通过函数来改变全局变量的值,全局变量在后面的函数中要用到。
我要实现的是通过一个函数改变变量的值,将改变后的值传给另一个函数,两个函数之间不能调用

直接在函数里使用全局变量就可以了。
因为是全局变量,所以一般就不用传参了。
#include<stdio.h>

int num=0;//全局变量

void Add()

num++;


void ToZero()

num=0;


int main()

//num=0;
Add();
//num=1;
Add();
//num=2;
ToZero();
//num=0;

晕,为什么要用改变全局变量的方法,用函数返回值return不就行了嘛,在一个函数中改变的值通过return返回到主函数的一个变量中,再引用到下个函数就行了
参考技术A 直接在函数里使用全局变量就可以了。
因为是全局变量,所以一般就不用传参了。
#include<stdio.h>

int num=0;//全局变量

void Add()

num++;


void ToZero()

num=0;


int main()

//num=0;
Add();
//num=1;
Add();
//num=2;
ToZero();
//num=0;

晕,为什么要用改变全局变量的方法,用函数返回值return不就行了嘛,在一个函数中改变的值通过return返回到主函数的一个变量中,再引用到下个函数就行了啊!
参考技术B 晕,为什么要用改变全局变量的方法,用函数返回值return不就行了嘛,在一个函数中改变的值通过return返回到主函数的一个变量中,再引用到下个函数就行了啊! 参考技术C 直接在函数里使用全局变量就可以了。
因为是全局变量,所以一般就不用传参了。
#include<stdio.h>

int num=0;//全局变量

void Add()

num++;


void ToZero()

num=0;


int main()

//num=0;
Add();
//num=1;
Add();
//num=2;
ToZero();
//num=0;
参考技术D 别在函数中使用与全局变量名字相同的变量就OK了,其他的都一样的.
当全局变量在函数中与局部变量名字相同时,自动屏蔽全局变量

以上是关于c语言如何将数组作为全局变量的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何定义全局变量

c语言怎样声明和定义全局变量

PHP中如何定义全局数组?

Keil中C语言模块化编程时全局变量、结构体处理细节

C语言中,宏替换与定义全局变量的区别是啥?

C语言中怎样在头文件中定义一个能够在所有文件中都可以使用的全局数组变量 ?