萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 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.

copyright © 萬盛學電腦網 all rights reserved