c语言数组长度是定值么 10
比如inta[5]={1,2,3,4,5};这样看它数组长度是5,可是我再赋值a[6]=0;也是可以的,这不就矛盾了么...
比如int a[5]={1,2,3,4,5};这样看它数组长度是5,可是我再赋值 a[6]=0;也是可以的,这不就矛盾了么
展开
2个回答
展开全部
在数组一章中,曾介绍过数组的长度是预先定义好的, 在整个程序中固定不变。C语言中不允许动态数组类型。例如: int n;scanf("%d",&n);int a[n]; 用变量表示长度,想对数组的大小作动态说明, 这是错误的。但是在实际的编程中,往往会发生这种情况, 即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题, 用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间, 也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。 其它文献中所提到的"动态数组",指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质是一个指向数组的指针变量.常用的内存管理函数有以下三个:
1.分配内存空间函数malloc
2.分配内存空间函数 calloc
3.释放内存空间函数free
1.分配内存空间函数malloc
2.分配内存空间函数 calloc
3.释放内存空间函数free
展开全部
楼上那哥们已经说到核心了,数组本质是指向一块内存的指针。
你首先定义了一个长度5的数组,这时候他的长度是5.当你再次赋值时,内存中会开辟一块新的长度为6的区块,然后将a的指针指向该块内存区域,这样长度就变成6了。你要理解数组长度一定是固定的(核心即某块内存区块长度是固定的,这个区块在被释放和回收之前长度都不会改变)。但是这只是相对的,相对于动态数组而言的(C语言没有动态数组),但是你可以将List理解为动态数组。
再提一点:a本身不是数组,只是数组的引用。这样说你可以理解了,之前a指向的那个数组长度固定不变,你新定义的a[6]=0这个数组的长度也固定不变。你赋值操作只是将a指向了新建的数组而不是将数组长度改变了。即你进行完a[6]=0这个操作以后,内存这两个数组都存在了,且{1,2,3,4,5}这个数组的长度依旧是5,只不过没有任何变量再指向该数组而已。
理解完这个问题以后建议你再去仔细看一下浅复制和深复制。因为不理解这些概念在程序运行过程中就可能会出错。
你首先定义了一个长度5的数组,这时候他的长度是5.当你再次赋值时,内存中会开辟一块新的长度为6的区块,然后将a的指针指向该块内存区域,这样长度就变成6了。你要理解数组长度一定是固定的(核心即某块内存区块长度是固定的,这个区块在被释放和回收之前长度都不会改变)。但是这只是相对的,相对于动态数组而言的(C语言没有动态数组),但是你可以将List理解为动态数组。
再提一点:a本身不是数组,只是数组的引用。这样说你可以理解了,之前a指向的那个数组长度固定不变,你新定义的a[6]=0这个数组的长度也固定不变。你赋值操作只是将a指向了新建的数组而不是将数组长度改变了。即你进行完a[6]=0这个操作以后,内存这两个数组都存在了,且{1,2,3,4,5}这个数组的长度依旧是5,只不过没有任何变量再指向该数组而已。
理解完这个问题以后建议你再去仔细看一下浅复制和深复制。因为不理解这些概念在程序运行过程中就可能会出错。
追问
你绝对是c++或者java学得比较多,,,,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询