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

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

在數(shù)組的初始化中,假設(shè)初始化的數(shù)值個(gè)數(shù)小于數(shù)組的大小,則全部用0來(lái)填充。這里通過(guò)初始化一個(gè)值,就可以給數(shù)組一個(gè)確定的結(jié)果。
(在不同系統(tǒng)和不同的編譯器可能會(huì)出現(xiàn)不同的結(jié)果)
還有一個(gè)小問(wèn)題就是C語(yǔ)言中空格的問(wèn)題,看下面的程序。
復(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"(三個(gè)空格+int),打印的結(jié)果如上圖。
b中前三個(gè)記錄了空格的Ascii碼,即32。
b中后面沒有使用的空間依然是0.
打完收工。
您可能感興趣的文章:
- C語(yǔ)言中多維數(shù)組的內(nèi)存分配和釋放(malloc與free)的方法
- C語(yǔ)言實(shí)現(xiàn)在數(shù)組A上有序合并數(shù)組B的方法
- C語(yǔ)言構(gòu)建動(dòng)態(tài)數(shù)組完整實(shí)例
- c語(yǔ)言合并兩個(gè)已排序數(shù)組的示例(c語(yǔ)言數(shù)組排序)
- 約瑟夫環(huán)問(wèn)題(數(shù)組法)c語(yǔ)言實(shí)現(xiàn)
- 深入理解c語(yǔ)言數(shù)組
- c語(yǔ)言中數(shù)組名a和&a詳細(xì)介紹
- C語(yǔ)言數(shù)組指針的小例子
- c語(yǔ)言字符數(shù)組與字符串的使用詳解
- C語(yǔ)言一維數(shù)組初步學(xué)習(xí)筆記
相關(guān)文章
C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)你了解多少
這篇文章主要為大家詳細(xì)介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02C語(yǔ)言 詳細(xì)講解接續(xù)符和轉(zhuǎn)義符的使用
接續(xù)符是用來(lái)告訴編譯器行為的符號(hào),那編譯器遇到接續(xù)符是什么行為呢,就是去掉接續(xù)符,然后把下一行連接到現(xiàn)在這行上面,轉(zhuǎn)義符是主要用于表示無(wú)回顯字符,也用于表示常規(guī)字符,轉(zhuǎn)義符必須放在單引號(hào)或者雙引號(hào)里面2022-04-04C語(yǔ)言之棧和堆(Stack && Heap)的優(yōu)缺點(diǎn)及其使用區(qū)別
本篇文章主要介紹了什么是棧(Stack) 、什么是堆( Heap),以及棧和堆的優(yōu)缺點(diǎn),同時(shí)介紹了應(yīng)該什么時(shí)候使用堆和棧,有需要的朋友可以參考下2015-07-07C語(yǔ)言實(shí)現(xiàn)校運(yùn)動(dòng)會(huì)項(xiàng)目管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)校運(yùn)動(dòng)會(huì)項(xiàng)目管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02c++多線程之死鎖的發(fā)生的情況解析(包含兩個(gè)歸納,6個(gè)示例)
這篇文章主要介紹了c++多線程之死鎖的發(fā)生的情況解析(包含兩個(gè)歸納,6個(gè)示例),需要的朋友可以參考下2018-01-01C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解分析
鏈表可以說(shuō)是一種最為基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)了,而單向鏈表更是基礎(chǔ)中的基礎(chǔ)。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護(hù)一組數(shù)據(jù)集合時(shí),就可以使用鏈表,這一點(diǎn)和數(shù)組很相似2021-11-11c++加法高精度算法的簡(jiǎn)單實(shí)現(xiàn)
下面小編就為大家?guī)?lái)一篇c++加法高精度算法的簡(jiǎn)單實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09