⑴ c语言变长数组如何实现(接收用户数据的数组)
你的想法是可以的。
实际上C提供一个标准的库函数可以实现这个功能。
void *realloc(void *mem_address, unsigned int newsize);
譬如:
int *p = malloc(sizeof(int)*3);
p[0]=0;p[1]=1;p[2]=2;
p = realloc(p, sizeof(int)*4);
这个时候,p指向的前三个int的值还是1、2、3,而且可以对第四个int赋值了。realloc会自动把原来的数据复制到新的内存空间上去。
⑵ C语言怎样定义变长数组
”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊.....)
写全的话应该是
int x = 2; //x定义并赋值,当然不一定是2
char array[x];测试了一下,这样的代码在VC6.0下会报错,因为对C99新标准没有很好地实现。VS2005也不行。VS2013可以正确编译。gcc
3.2.2也可以正确编译。
⑶ 简单问题:如何使用c语言中的变长数组
没办法定义
”变长数组“
char
array[x];
x的值
在定义(分配空间时)必须指明
或者程序能得到x的值。
变长数组
基本实现思路是
申请一块内存
可存放x个元素
当元素的个数大于x后增加x/n个元素空间(可以使用内存复制)
⑷ c语言中长度可变的数组
如果一个数组具有动态存储周期(也就是说,如果在语句块内定义数组,并且没有 static 修饰符),那么 C99 也允许把非常量表达式作为元素数量来定义该数组。这样的数组被称为长度可变数组(variable-length array)。
而且,长度可变数组的名称必须是普通的标识符。长度可变数组不能作为结构或联合的成员。在下面的示例中,只有 vla 数组的定义是合法的:
void func( int n ){int vla[2*n]; // 合法:存储周期为动态的static int e[n]; // 非法:长度可变数组不可有静态存储周期
struct S { int f[n]; }; // 非法:f不是一个普通标识符/* ... */}
⑸ C语言如何定义一个可变大小的数组
在C语言中,数组的大小是在定义的时候就需要确定的,不然编译的时候进行分配内存时,会使计算机不知道该分配多少内存单元而报错。
然而,可以根据定义一个链表来达到可变的效果。
链表节点定义如下:
struct
{
intdata;//数据域
structnode*next;//指针域
}*node;
structnodehead,p;
head->data=4;
head->next=p;
p->data=5;
类似的可以将一个节点看成是数组中的一个元素,需要增加元素的时候,就增加链表的节点就可以了。
⑹ C语言支持可变长数组吗,如果可以请举例书名。谢谢
c99以前的版本是没有的,数组大小必须是常量或者是常量表达式,c99版本才加入变长数组,如:
int add(int n)
{
int a[n];
......
}
即使它叫做变长数组,但是数组大小一旦确定就不能改变了。
很多书里面都有介绍,如《深入理解计算机系统》
⑺ 请问C语言中变长数组如何初始化
C语言不支持不定长数组,要么malloc,要么在动态的指定它的长度
动态数组不能初始化,可使用memset
1.int* p = (int*)malloc(num);
2.int num = 5;
arr[num];
若使用arr[],则需要在后面对齐进行初始化,来指定长度,否则编译可以通过,但是默认只有一个单元,超过一个单元的长度,在后面程序的运行中有可能会被冲掉。
⑻ 能否在C程序中改变数组的长度
b是const类型的,值不能改变。
对于数组来说,一般方式定义的数组都是固定长度的。如果希望改变数组的长度,可以采用链表来代替普通的静态数组。
对于简单类型变量,有另一种更为简单的方式实现变长数组,就是
int *a;
然后在你需要的地方 a=new int[b];
这个时候b可以是int型的变量,可以在为a分配空间之前计算好。
只需要在最后delete a;就可以释放为a分配的内存空间。
C当中没有new和delete的话可以用malloc和free,两者等价。
以上的方式即可以实现“某种意义下”的无长度限制的一维数组。但是不能够实现无限长的数组(注意,无长度限制和无限长是不同的概念)。