十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
”变长数组“确实是有的,是在C99标准才出现的。题主的写法没有错。变长指的就是可以用变量指定数组大小,而不是说数组大小可以在runtime改变。(”变长“这个这个翻译很怪啊.....)
成都创新互联公司专注于新会网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供新会营销型网站建设,新会网站制作、新会网页设计、新会网站官网定制、小程序制作服务,打造新会网络公司原创品牌,更为您提供新会网站排名全网营销落地服务。
写全的话应该是
int x = 2; //x定义并赋值,当然不一定是2
char array[x];测试了一下,这样的代码在VC6.0下会报错,因为对C99新标准没有很好地实现。VS2005也不行。VS2013可以正确编译。gcc
3.2.2也可以正确编译。
int main()
{
unsigned char n;
for(n=0;n10;n++)
{
char x[n]; //注意变长数组必须在程序块内定义,不能在文件内定义
x[n]=n;
printf("%d",x[n]);
fflush(stdout);
}
return 0;
}
GCC实测通过
动态分配的数组可以自定义数组的长度,示例如下:
#include
stdio.h
#include
string.h
#include
stdlib.h
int
main()
{
printf("输入要分配的内存大小:");
int
size;
scanf("%d",
size);
//输入自定义的数组长度
int
*pstart
=
(int
*)malloc(sizeof(int)
*size);
if
(pstart==0)
{
printf("不能分配内存\n");
return
0;
}
memset(pstart,
0x00,
sizeof(int)
*
size);
int
inx;
for
(inx=0;
inx!=size;
++inx)
pstart[inx]
=
inx;
for
(inx=0;
inx!=size;
++inx)
printf("%d\t",
pstart[inx]);
printf("\n");
return
0;
}
你的想法是可以的。
实际上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会自动把原来的数据复制到新的内存空间上去。