c语言动态数组如何扩充空间

Python022

c语言动态数组如何扩充空间,第1张

c语言动态数组扩充空间,主要是利用动态存储分配函数来实现的,常用的有malloc函数和calloc函数。

malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。

例如:

char *x

x = (char *)malloc(10)//x就指向了包含10个字符单元的存储空间。

扩展资料:

函数定义

其函数原型为void *malloc(unsigned int size);其作用是在内存的动态存储区中分配一个长度为size的连续空间。此函数的返回值是分配区域的起始地址,或者说,此函数是一个指针型函数,返回的指针指向该分配域的开头位置。

如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

参考资料来源:百度百科-malloc函数

不会自动扩容,你这个赋值其实已经越界了,但是编译器不会检查是否越界,所以可以编译,不报错。

需要注意:越界之后,可能会出现不可预料的问题,也就是很多书上说的,行为未定义,所以应该特别注意这种情况

你的动态数组只有n个元素,已经装满了的话,就需要扩容。

具体看例子。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct User

{

char name[10]

int score

}

int main()

{

const char user_name[]="wonder"

const int user_score=99

//c表示容量,n表示元素数量,incr表示每次扩容时的增量

int c=1,n=0,incr=10

int i

struct User *array=(struct User*)calloc(c,sizeof(struct User))

strcpy(array[0].name,"name1")

array[0].score=1

n++

printf("追加用户前:\n")

for(i=0i<ni++)

printf(n-1!=i ? "%s %d," : "%s %d\n",

array[i].name,array[i].score)

//n>=c说明动态数组array已装满,需扩容

if(n>=c)

{

printf("对动态数组array进行扩容\n")

c+=incr

array=(struct User*)realloc(array,sizeof(struct User)*c)

}

//追加

strcpy(array[n].name,user_name)

array[n].score=user_score

n++

printf("追加用户后:\n")

for(i=0i<ni++)

printf(n-1!=i ? "%s %d," : "%s %d\n",

array[i].name,array[i].score)

free(array)

return 0

}