当前位置:首页 » 编程语言 » c语言数组的大小在何时确定
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数组的大小在何时确定

发布时间: 2022-07-24 03:56:02

‘壹’ c语言数组的大小问题

先用循环统计的方式获得数量(作为数组长度),然后赋值给一个const常量,最后用这个常量作为数组长度即可。
如果无法估计需要的最大长度,可以直接把数组长度定义得尽可能地长,多余的部分就不用了就行了。

如果说你要的是不定长的数组(动态数组)的话,还是用集合(或者叫容器)来替代数组(静态数组)比较好。(如STL中的容器vector就可以实现,另外字符串可以使用String类类型,但这些必须在C++里面做)

‘贰’ C语言定义数组一定要指定大小吗

是的,c中数组定义时要指定大小。

当然,万事也不是绝对的。例如:1.作为形参的时候,可以不指定,因为在函数调用的时候,数组会转为指针的。2.当为字符串数组时,char ST[]="hello word"这儿定义了一个ST字符数值,不需要你自己去指定大小,系统会自动生成长度为11.

‘叁’ 请教:C语言中,如何确定整个二维数组的大小

C语言中的二维数组是“一维数组的数组”
向函数中传递的时候,最外层的数组直接翻译成指针,传递时传递其首地址,数组是传不进去的。
所以
s是指针,sizeof(s) = 4
*s是一个长度为16个char的一维数组,长度是16。

‘肆’ C语言里面 数组都要事先定义长度吗 知道

在数组一章中,曾介绍过数组的长度是预先定义好的,
在整个程序中固定不变。C语言中不允许动态数组类型。例如:
int
n;scanf("%d",&n);int
a[n];
用变量表示长度,想对数组的大小作动态说明,
这是错误的。但是在实际的编程中,往往会发生这种情况,
即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,
用数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,
也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。
其它文献中所提到的"动态数组",指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小.其本质是一个指向数组的指针变量.常用的内存管理函数有以下三个:
1.分配内存空间函数malloc
2.分配内存空间函数
calloc
3.释放内存空间函数free

‘伍’ c语言中数组的大小可以改变吗

数组大小一旦确定就不能改变。

数组长度必须在编译时确定,可以使用malloc函数在程序运行时动态分配所需“数组”长度。定义数组需要指定数组的长度,然后系统会根据这个长度分配固定的内存大小。

当出现intarray[10];这种情况的时候,是不可以变的,这时候变量的存储空间在栈区。当intn;cin>>n;intarray=newint[n];的时候,数组可以根据n输入的大小去分配内存,这时候数组存在堆区。

(5)c语言数组的大小在何时确定扩展阅读

长度为0的数组在标准C和C++中是不允许的,如果使用长度为0的数组,编译时会产生错误,提示数组长度不能为0。但在GNUC中,这种用法却是合法的。

它的最典型的用法就是位于数组中的最后一项,这样做主要是为了方便内存缓冲区的管理。如果长度为0的数组换为指针,那么在分配内存时,需采用两步:

1、需为结构体分配一块内存空间;

2、再为结构体中的成员变量分配内存空间。这样两次分配的内存是不连续的,需要分别对其进行管理。当使用长度为0的数组时,则是采用一次分配的原则,一次性将所需的内存全部分配给它。相反,释放时也是一样的。

‘陆’ C语言中第一维数组的大小的准确定义

ANSI C89标准中规定,一个数组的尺寸(下标)必须是一个整型常量表达式以便于在编译时计算大小,而这里的所谓常量(或者常量表达式的运算结果),一般是指unsigned int。

16位编译器(比如Turbo C)中,unsigned int为16位,因此数组最多32767个数据。

32位编译器(比如Visual C++ 6.0)中,unsigned int为32位,因此数组最多4294967295个数据。

以上结论为理论值。

实际上,在VC++中,我们定义一个259025元素的整型数组,虽然可以编译通过,但是我们仍将得到一个运行时错误(runtime error)。这主要跟堆和栈的大小有关,详细情况请查阅操作系统相关资料。

错误代码范例:

// VC++ 6.0 中
void main()
{
int a[259025]; // 运行时错误,259024是ok的。
char b[259025]; // ok。
char c[1036097]; // 运行时错误,1036096是ok的。
}

// TC2.0 中
void main()
{
int a[32768]; // 编译错误,32767是ok的。
char b[65536]; // 编译错误,65535是ok的。
}

‘柒’ c语言如何确认指针数组的大小

同学,你理解有误哇,这个程序是把一些字符串常量赋值给了指针,这些字符串常量在内存中是静态存储的,只是指针指向了他们的“头”。
比如 char *p=“BASIC”;
内存中会被会分配一段连续空间存放 'B','A','S','I','C','\0' 这6个数据,读取时以 ‘\0' 作为结束。
strcmp函数是逐个比较字符串中每个字符的ASCII码值,若前者比后者大返回值为正,反之为负,相等则为0.