C语言程序设计(第5章数组)

C语言程序设计(第5章数组),第1张

C语言程序设计(第5章数组),第2张

数组是几个相同类型的变量的集合,这些变量可以用相同的名称引用。数组由连续的存储单元组成,最低地址对应数组的第一个元素,地址对应最后一个元素。该阵列可以是一维的或多维的。

5.1一维数组
一维数组的一般描述形式如下:
类型说明符var _ name[size];
在C语言中,必须显示数组的描述,这样编译器才能为它们分配内存空。在上面的公式中,类型说明符表示数组的类型,即数组中每个元素的个数。一维数组的总字节数可以这样计算:
sizeof *数组长度=总字节数。

[例5-1]将数字0到9加载到一个整数数组中。
main()
{
int x[10];/*定义一个包含1 0个整数的数组,引用为x [0],x [1]...x[9]*/
int t;
for(t = 0;T}
C语言不检查数组的边界,所以数组两端都有可能越界,这可能破坏其他变量的数组,甚至破坏程序代码。必要时,检查数组的边界是程序员的责任。例如,当使用gets()接收字符输入时,必须确保字符数组足够长,能够容纳最长的字符串。
一维数组本质上是由同类数据组成的表。比如下面的数组a:
char a[7]
图5-1说明了数组A在内存中的情况,假设起始地址为1000。


5.1.1向函数传递一维数组
向函数传递一维数组时,可以直接用数组名作为参数调用函数,不需要任何下标。这样,数组第一个元素的地址将被传递给函数。c语言不把整个数组作为参数传递,而是用指针代替。例如,下面的程序将数组I的第一个元素的地址传递给函数func1()。
main()
{
int I[10];
func 1(I);/*函数调用,实际参数是数组名*/
...
}
如果函数要接收一维数组的传递,可以使用以下两种方法之一解释形参;1)有界数组;2)无界数组。比如func1()要接收的数组I可以解释为:
func 1(str)
charstr[10];/*有界数组,数组的下标只能小于或等于传递的数组的大小。*/
{
...
}
也可以解释为:
func 1(str)
charstr[];/*无界数组*/
{

...
}
这两种描述方法的效果是等效的,都是通知编译器建立一个字符指针。第一个描述使用标准数组描述;后一种描述使用了改进的数组描述,只表示函数将接收一定长度的整数数组。仔细想想会发现,就函数而言,数组有多长并不重要,因为C语言并不检查数组的边界。其实就编译程序而言,下面的解释也是可行的。
func 1(str);
int str[32];
{
...
}
因为编译器只生成让func1()接收指针的代码,并不真正生成3 ^ 2元素的数组。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C语言程序设计(第5章数组)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情