C语言中全局数组和局部数组的问题

2016-02-19 11:54 0 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的C语言中全局数组和局部数组的问题懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】

今天同学遇到一个在C语言中全局数组和局部数组的问题,卡了许久,我也没有第一时间看出问题,现在把问题梳理一下,并给出解决方案。
问题描述
在全局声明的数组与在局部声明的数组有着不同的效果。
首先来看一个程序:
代码如下:

#include stdio.h
#include stdlib.h
#define MAX 10
char a[MAX];
int main()
{
int i;
char b[MAX];
char *c=(char *)malloc(MAX * sizeof(char));
printf("nArray a:n");
for(i=0;iMAX;i++)
printf("%d ",a[i]);

printf("nArray b:n");
for(i=0;iMAX;i++)
printf("%d ",b[i]);

printf("nArray c:n");
for(i=0;iMAX;i++)
printf("%d ",c[i]);
printf("nDone");
free(c);
return 1;
}

编译运行结果:
 
程序主要功能是打印字符数组的Ascii码。可以发现全局数组a和动态生成的数组c有着相同的结果,而局部声明的数组b确被分配了随机的数值,也许这就是问题的所在。
解决方案:
代码如下:

#include stdio.h
#include stdlib.h
#define MAX 10
char a[MAX]={0};
int main()
{
int i;
char b[MAX]={0};
char *c=(char *)malloc(MAX * sizeof(char));
printf("nArray a:n");
for(i=0;iMAX;i++)
printf("%d ",a[i]);

printf("nArray b:n");
for(i=0;iMAX;i++)
printf("%d ",b[i]);

printf("nArray c:n");
for(i=0;iMAX;i++)
printf("%d ",c[i]);
printf("nDone");
free(c);
return 1;
}

运行结果:
 
在数组的初始化中,假设初始化的数值个数小于数组的大小,则全部用0来填充。这里通过初始化一个值,就可以给数组一个确定的结果。
(在不同系统和不同的编译器可能会出现不同的结果)
还有一个小问题就是C语言中空格的问题,看下面的程序。
代码如下:

#include stdio.h
#include stdlib.h
#define MAX 10
int main()
{
int i;
char b[MAX]={0};
gets(b);
printf("nArray b:n");
for(i=0;iMAX;i++)
printf("%d ",b[i]);
printf("nDone");
return 1;
}

 
在这里,我输入了" int"(三个空格+int),打印的结果如上图。
b中前三个记录了空格的Ascii码,即32。
b中后面没有使用的空间依然是0.
打完收工。

来源:https://www.tulaoshi.com/n/20160219/1599052.html

延伸阅读
我们在C语言编程中会碰到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的: int printf( const char* format, ...); !-- frame contents -- !-- /frame contents -- 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法: printf("%d",i); printf...
数组下标 JScript 中的数组是稀疏的。也就是说,假如一个数组具有三个元素,编号分别为 0、1 和 2,您就可以创建元素 50,而不必担心从 3 到 49 的参数。假如该数组有一个自动的 length 变量,(请参阅 内部对象 了解有关数组长度的自动监控的说明),该 length 变量被设为 51,而不是 4。当然您可以创建各元素的编号之间没有间隙的数组,不...
笔者在开发某软件过程中碰到这样一个问题,前级模块传给我二进制数据,输入参数为 char* buffer和 int length,buffer是数据的首地址,length表示这批数据的长度。数据的特点是:长度不定,类型不定,由第一个字节(buffer[0])标识该数据的类型,共有256(28 )种可能性。我的任务是必须对每一种可能出现的数据类型都要作处理,并且我的模块包...
标签: Delphi
  方法:       var          A:array of Integer;       begin            ShowMessage(IntToStr(High(A))); //<- 值为1          ...
揭开C/C++中数组形参的迷雾 作者:乾坤一笑 楔子 去年,周星星大哥曾经在VCKBASE/C++论坛发表过一篇文章“数组引用"以避免"数组降阶”,当时我不能深入理解这种用法的含义;时隔一年,我的知识有几经锤炼,终于对此文章渐有所悟,所以把吾所知作想详细道来,竟也成了一篇文章...

经验教程

503

收藏

73
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部