程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> C語言中全局數組和局部數組的問題

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(" Array a: ");

      for(i=0;i<MAX;i++)

      printf("%d ",a[i]);

      printf(" Array b: ");

      for(i=0;i<MAX;i++)

      printf("%d ",b[i]);

      printf(" Array c: ");

      for(i=0;i<MAX;i++)

      printf("%d ",c[i]);

      printf(" Done");

      free(c);

      return 1;

      }

      編譯運行結果:

      

    C語言中全局數組和局部數組的問題 三聯

      程序主要功能是打印字符數組的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(" Array a: ");

      for(i=0;i<MAX;i++)

      printf("%d ",a[i]);

      printf(" Array b: ");

      for(i=0;i<MAX;i++)

      printf("%d ",b[i]);

      printf(" Array c: ");

      for(i=0;i<MAX;i++)

      printf("%d ",c[i]);

      printf(" Done");

      free(c);

      return 1;

      }

      運行結果:

      

    C語言中全局數組和局部數組的問題

      在數組的初始化中,假設初始化的數值個數小於數組的大小,則全部用0來填充。這裡通過初始化一個值,就可以給數組一個確定的結果。

      (在不同系統和不同的編譯器可能會出現不同的結果)

      還有一個小問題就是C語言中空格的問題,看下面的程序。

      代碼如下:

      #include <stdio.h>

      #include <stdlib.h>

      #define MAX 10

      int main()

      {

      int i;

      char b[MAX]={0};

      gets(b);

      printf(" Array b: ");

      for(i=0;i<MAX;i++)

      printf("%d ",b[i]);

      printf(" Done");

      return 1;

      }

      

    C語言中全局數組和局部數組的問題

      在這裡,我輸入了" int"(三個空格+int),打印的結果如上圖。

      b中前三個記錄了空格的Ascii碼,即32。

      b中後面沒有使用的空間依然是0.

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved