C語言中全局?jǐn)?shù)組和局部數(shù)組的問題
更新時(shí)間:2012年12月09日 18:33:54 作者:
今天同學(xué)遇到一個(gè)在C語言中全局?jǐn)?shù)組和局部數(shù)組的問題,卡了許久,我也沒有第一時(shí)間看出問題,現(xiàn)在把問題梳理一下,并給出解決方案,需要的朋友可以參考下
今天同學(xué)遇到一個(gè)在C語言中全局?jǐn)?shù)組和局部數(shù)組的問題,卡了許久,我也沒有第一時(shí)間看出問題,現(xiàn)在把問題梳理一下,并給出解決方案。
問題描述:
在全局聲明的數(shù)組與在局部聲明的數(shù)組有著不同的效果。
首先來看一個(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碼。可以發(fā)現(xiàn)全局?jǐn)?shù)組a和動(dòng)態(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;
}
運(yùn)行結(jié)果:
在數(shù)組的初始化中,假設(shè)初始化的數(shù)值個(gè)數(shù)小于數(shù)組的大小,則全部用0來填充。這里通過初始化一個(gè)值,就可以給數(shù)組一個(gè)確定的結(jié)果。
(在不同系統(tǒng)和不同的編譯器可能會出現(xiàn)不同的結(jié)果)
還有一個(gè)小問題就是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"(三個(gè)空格+int),打印的結(jié)果如上圖。
b中前三個(gè)記錄了空格的Ascii碼,即32。
b中后面沒有使用的空間依然是0.
打完收工。
問題描述:
在全局聲明的數(shù)組與在局部聲明的數(shù)組有著不同的效果。
首先來看一個(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碼。可以發(fā)現(xiàn)全局?jǐn)?shù)組a和動(dòng)態(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;
}
運(yùn)行結(jié)果:
在數(shù)組的初始化中,假設(shè)初始化的數(shù)值個(gè)數(shù)小于數(shù)組的大小,則全部用0來填充。這里通過初始化一個(gè)值,就可以給數(shù)組一個(gè)確定的結(jié)果。
(在不同系統(tǒng)和不同的編譯器可能會出現(xiàn)不同的結(jié)果)
還有一個(gè)小問題就是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"(三個(gè)空格+int),打印的結(jié)果如上圖。
b中前三個(gè)記錄了空格的Ascii碼,即32。
b中后面沒有使用的空間依然是0.
打完收工。
您可能感興趣的文章:
- C語言中多維數(shù)組的內(nèi)存分配和釋放(malloc與free)的方法
- C語言實(shí)現(xiàn)在數(shù)組A上有序合并數(shù)組B的方法
- C語言構(gòu)建動(dòng)態(tài)數(shù)組完整實(shí)例
- c語言合并兩個(gè)已排序數(shù)組的示例(c語言數(shù)組排序)
- 約瑟夫環(huán)問題(數(shù)組法)c語言實(shí)現(xiàn)
- 深入理解c語言數(shù)組
- c語言中數(shù)組名a和&a詳細(xì)介紹
- C語言數(shù)組指針的小例子
- c語言字符數(shù)組與字符串的使用詳解
- C語言一維數(shù)組初步學(xué)習(xí)筆記
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(166.分?jǐn)?shù)轉(zhuǎn)循環(huán)小數(shù))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(166.分?jǐn)?shù)轉(zhuǎn)循環(huán)小數(shù))2021-07-07
C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件操作)
這篇文章主要介紹了C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),增加了文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06

