C語言中全局?jǐn)?shù)組和局部數(shù)組的問題
更新時間:2012年12月09日 18:33:54 作者:
今天同學(xué)遇到一個在C語言中全局?jǐn)?shù)組和局部數(shù)組的問題,卡了許久,我也沒有第一時間看出問題,現(xiàn)在把問題梳理一下,并給出解決方案,需要的朋友可以參考下
今天同學(xué)遇到一個在C語言中全局?jǐn)?shù)組和局部數(shù)組的問題,卡了許久,我也沒有第一時間看出問題,現(xiàn)在把問題梳理一下,并給出解決方案。
問題描述:
在全局聲明的數(shù)組與在局部聲明的數(shù)組有著不同的效果。
首先來看一個程序:
#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;
}
編譯運行結(jié)果:
程序主要功能是打印字符數(shù)組的Ascii碼??梢园l(fā)現(xiàn)全局?jǐn)?shù)組a和動態(tài)生成的數(shù)組c有著相同的結(jié)果,而局部聲明的數(shù)組b確被分配了隨機(jī)的數(shù)值,也許這就是問題的所在。
解決方案:
#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;
}
運行結(jié)果:
在數(shù)組的初始化中,假設(shè)初始化的數(shù)值個數(shù)小于數(shù)組的大小,則全部用0來填充。這里通過初始化一個值,就可以給數(shù)組一個確定的結(jié)果。
(在不同系統(tǒng)和不同的編譯器可能會出現(xiàn)不同的結(jié)果)
還有一個小問題就是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),打印的結(jié)果如上圖。
b中前三個記錄了空格的Ascii碼,即32。
b中后面沒有使用的空間依然是0.
打完收工。
問題描述:
在全局聲明的數(shù)組與在局部聲明的數(shù)組有著不同的效果。
首先來看一個程序:
復(fù)制代碼 代碼如下:
#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;
}
編譯運行結(jié)果:

程序主要功能是打印字符數(shù)組的Ascii碼??梢园l(fā)現(xiàn)全局?jǐn)?shù)組a和動態(tài)生成的數(shù)組c有著相同的結(jié)果,而局部聲明的數(shù)組b確被分配了隨機(jī)的數(shù)值,也許這就是問題的所在。
解決方案:
復(fù)制代碼 代碼如下:
#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;
}
運行結(jié)果:

在數(shù)組的初始化中,假設(shè)初始化的數(shù)值個數(shù)小于數(shù)組的大小,則全部用0來填充。這里通過初始化一個值,就可以給數(shù)組一個確定的結(jié)果。
(在不同系統(tǒng)和不同的編譯器可能會出現(xiàn)不同的結(jié)果)
還有一個小問題就是C語言中空格的問題,看下面的程序。
復(fù)制代碼 代碼如下:
#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),打印的結(jié)果如上圖。
b中前三個記錄了空格的Ascii碼,即32。
b中后面沒有使用的空間依然是0.
打完收工。
相關(guān)文章
C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)你了解多少
這篇文章主要為大家詳細(xì)介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02C語言 詳細(xì)講解接續(xù)符和轉(zhuǎn)義符的使用
接續(xù)符是用來告訴編譯器行為的符號,那編譯器遇到接續(xù)符是什么行為呢,就是去掉接續(xù)符,然后把下一行連接到現(xiàn)在這行上面,轉(zhuǎn)義符是主要用于表示無回顯字符,也用于表示常規(guī)字符,轉(zhuǎn)義符必須放在單引號或者雙引號里面2022-04-04C語言之棧和堆(Stack && Heap)的優(yōu)缺點及其使用區(qū)別
本篇文章主要介紹了什么是棧(Stack) 、什么是堆( Heap),以及棧和堆的優(yōu)缺點,同時介紹了應(yīng)該什么時候使用堆和棧,有需要的朋友可以參考下2015-07-07c++多線程之死鎖的發(fā)生的情況解析(包含兩個歸納,6個示例)
這篇文章主要介紹了c++多線程之死鎖的發(fā)生的情況解析(包含兩個歸納,6個示例),需要的朋友可以參考下2018-01-01C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解分析
鏈表可以說是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時,就可以使用鏈表,這一點和數(shù)組很相似2021-11-11