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

 更新时间:2012年12月09日 18:33:54   作者:  
今天同学遇到一个在C语言中全局数组和局部数组的问题,卡了许久,我也没有第一时间看出问题,现在把问题梳理一下,并给出解决方案,需要的朋友可以参考下
今天同学遇到一个在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;i<MAX;i++)
printf("%d ",a[i]);

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

printf("\nArray c:\n");
for(i=0;i<MAX;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;i<MAX;i++)
printf("%d ",a[i]);

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

printf("\nArray c:\n");
for(i=0;i<MAX;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;i<MAX;i++)
printf("%d ",b[i]);
printf("\nDone");
return 1;
}

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

相关文章

  • QT使用QChart绘制饼图

    QT使用QChart绘制饼图

    在Qt中使用QChart类可以快速绘制一个图表出来,比如折线图、饼图、柱状图等,本文就来为大家介绍一下如何利用QChart绘制简单的饼图吧
    2024-11-11
  • 数据结构之堆详解

    数据结构之堆详解

    这篇文章主要介绍了数据结构之堆详解,本文讲解了堆的基本常识堆的基本操作、堆的应用等内容,需要的朋友可以参考下
    2014-08-08
  • C语言double和float 实例分析

    C语言double和float 实例分析

    本文主要介绍了C语言中的浮点数(float,double),并通过实例代码进行分析比较,希望能帮助学习相关知识的同学
    2016-07-07
  • C语言文件操作函数freopen详细解析

    C语言文件操作函数freopen详细解析

    替换一个流,或者说重新分配文件指针,实现重定向。如果stream流已经打开,则先关闭该流。如果该流已经定向,则freopen将会清除该定向。此函数一般用于将一个指定的文件打开一个预定义的流:标准输入、标准输出或者标准出错
    2013-10-10
  • 详解C#byte数组怎么传入C

    详解C#byte数组怎么传入C

    在本篇内容里小编给大家整理了关于C#byte数组怎么传入C的相关知识点内容,有兴趣的朋友们学习参考下。
    2019-03-03
  • C++读写配置项的基本操作

    C++读写配置项的基本操作

    这篇文章主要介绍了C++读写配置项的基本操作,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
    2021-01-01
  • C++实现LeetCode(166.分数转循环小数)

    C++实现LeetCode(166.分数转循环小数)

    这篇文章主要介绍了C++实现LeetCode(166.分数转循环小数)
    2021-07-07
  • C++11中互斥锁的使用

    C++11中互斥锁的使用

    本文主要介绍了C++11中互斥锁的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言实现学生信息管理系统(文件操作)

    C语言实现学生信息管理系统(文件操作)

    这篇文章主要介绍了C语言实现学生信息管理系统,增加了文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • C++编程面向对象入门全面详解

    C++编程面向对象入门全面详解

    这篇文章主要为大家介绍了C++面向对象入门的全面详解,文章较长非常全面建议收藏阅读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10

最新评论