C语言与C#下的动态数组
大家好,我就是人见人爱花见花开车间车爆胎的小智 声音依旧是那么低沉且性感,今天又来更新博客的第一视角了。
今天跟大家分享的是C语言下的动态数组的使用。
在学习C语言时,想必大家都了解在定义数组时这个数组长度是很难定义的,这个难:如果定义的数组内存大小太小,会导致数据溢出,程序崩溃;
而定义的数组内存大小太大,会极大地浪费空间,导致程序运行速度变慢。
那么有些人就想了,怎样让用户自己输入数组长度,想用多少内存就用多少。
C语言
那么下面这段代码就诞生了:
int main(void)
{ int i,n;
scanf("%d",&n); <span style="white-space:pre"> </span>//有问题
int array[n]; <span style="white-space:pre"> </span>//有问题
for(i=0;i<n;i++)
scanf("%d",&array[i]);
for(i=0;i<n;i++)
printf("%5d",array[i]);
printf("\n");
return 0;
}//当然这段代码是有bug的
有些人就会想当然的让用户输入数组长度(scanf("%d",&n)),在定义数组array(int array[n]),想法看似成立,但是在标准的C语言下这段代码会编译报错, 因为数组长度应该是一个常量,而这里用变量n表示长度,想对数组的大小作动态说明,这是错误的。(神奇的一点是linux下的这段代码既可以编译通过也可以运行出想要的结果,这个在这不多做介绍)。
但是这种定义数组不行,那怎样才能对数组作动态说明呢,那就是使用分配内存空间函数malloc和释放内存空间函数free,看下面这个代码:
int main(void)
{
int i,n;
int *a;
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n); //为a分配n个int大小的内存
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
free(a); //释放内存
return 0;
}
C#
在c#下的动态数组定义就相对比较简单了:
int m=Console.Readline();
int n=Console.Readline();
int[,]arr=new int [m,n];
这样一个二维数组定义就完成了,是不是感觉c#下动态数组的定义很简单呀
。
那么今天的博客就更新到此了,小智期待下次与大家见面