C语言 可变长数组
发布时间:2025-05-12 08:16:32 发布人:远客网络
一、C语言 可变长数组
1、我就不看你的bubble sort的算法部分了,直接跟你讲你不知道错误的原因。
2、这里你已经定义n= 1,而a[n]也在该行定义。
3、那么编译器在此就直接给a这个数列分配内存了。
4、也就是说你a这个数组大小就确定了,即为1。
5、我不知道你学了内存分配没有,简单给你讲解一下,
6、比如一个含有5个整数类型的数组可以这样定义a[5],
7、但是也可以这样获得:int*a=(int*) malloc( sizeof( int)* 5);
8、也就是说我们给一个指针分配了内存,从而得到一个数组,
9、而a[5]这样定义也是需要编译器在编译程序的时候分配内存的
10、而编译器会根据你的代码优化你的程序,并把代码转化为汇编再者machine code
11、这个时候由于你在声明数组之前就已经读入n了,
12、所以a这个时候才是根据你输入的数字所得大小的数组。
二、在C语言中,数组名可以做加法和减法吗
1、C语言中,数组名是一个不可变的指针常量,不能对它进行加、减和赋值运算。
2、在C语言中规定,数组名是代表该数组的首地址且符合标识符书写规定的变量标识符。不能对它进行加、减和赋值运算。整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],设数组c的首地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个首地址。
3、数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标]其中的下标只能为整型常量或整型表达式。数组名的书写规则应符合标识符的书写规定。数组名不能与其它变量名相同。
4、如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。
三、C语言怎么实现可变长度字符串
1、C语言实现可变长度字符串,主要依靠realloc函数实现,主要代码如下,
2、//程序功能,判断插入字符长度len,若大于预设大小n,调整字符串数组大小,实现动态处理数组大小。
3、int main(int argc, char*argv[])
4、 pstr=(char*)malloc(sizeof(char)*n);//申请sizeof(char)*n个大小的内存空间
5、 printf("内存申请出错,程序退出!\n");
6、 memset(pstr,'\0',sizeof(char)*n);//初始化内存空间
7、 printf("输入待插入字符串:\n");
8、 printf("内存申请出错,程序退出!%d\n",len);
9、 if(len>n)//字符串长度大于初始大小n,重新申请内存空间
10、 pstr=(char*)realloc(pstr,sizeof(char)*len);//重新申请内存空间
11、 strcat(pstr,str);//将插入字符串连接给pstr
12、void*realloc( void*ptr, size_t size);函数将ptr指向的储存空间改变为给定的大小size。参数size可以是任意大小,大于或小于原尺寸(需要注意的是原始数据会丢失)都可以。返回值是指向新空间的指针,如果错误发生返回NULL。