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函数

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-09
数据结构专门有讲的,下几个课件看看就行了.
1.分配内存空间函数malloc

调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。

2.分配内存空间函数 calloc

calloc 也用于分配内存空间。调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

3.释放内存空间函数free

调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr 是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域:

main()
{
struct stu
{
int num;
char *name;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps->num=102;
ps->name="Zhang ping";
ps->sex='M';
ps->score=62.5;
printf("Number=%d\nName=%s\n",ps->num,ps->name);
printf("Sex=%c\nScore=%f\n",ps->sex,ps->score);
free(ps);
}追问

是动态数组存储空间的扩充,不是用到链表这些存储结构的扩充

第2个回答  推荐于2017-10-01
那我改下之前的回答,你的意思就是要做个内存管理堆栈系统嘛。

可以考虑这么做。

int *p = NULL;
p = malloc(xxx* sizeof(int)); //xxx你的存储空间总得有个大小吧
int *pFirst = p;
int size = 0;

然后封装一个int * my_malloc(malloc_size)
{
int ret_val = size;
size += malloc_size;
return p[size];
}
这个函数记载返回空间的首地址
每次输入一个数据时调用my_malloc加上你输入数据的大小就可以了。本回答被提问者采纳
第3个回答  2011-10-09
什么叫动态数组,C的都是指定好下标的数组
第4个回答  推荐于2017-10-01
c语言动态数组扩充空间,主要是利用动态存储分配库函数来实现的,常用的有malloc函数和calloc函数。

malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。
例如:
char *x;
x = (char *)malloc(10); //x就指向了包含10个字符单元的存储空间

calloc()函数是在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
例如:
char*str = NULL;
str = (char*)calloc(10,sizeof(char));
strcpy(str, "Hello");
printf("String is %s\n",str);
free(str);

c语言动态数组如何扩充空间
c语言动态数组扩充空间,主要是利用动态存储分配库函数来实现的,常用的有malloc函数和calloc函数。malloc()是C语言中动态存储管理的一组标准库函数之一。其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。例如...

c语言中数组动态增长有哪些方法?
可以,但不能是静态数组如int a[50];左边分配在堆栈上,(分配在堆栈上的变量)不能在编译时不知道分多少空间,并且分了多少空间就是多少。如果想让数组大小动态分配,可以使用下面做法,记得用完要free:int* a=(int*)malloc(n*sizeof(int));\/\/n是数组的大小。或者这样calloc函数的一个好处就是...

C语言中用动态数组储存一个长度未知的字符串,应该怎么使用malloc和rea...
\\x0d\\x0a比如:*p初始分配10个字符空间。\\x0d\\x0a当空间不够用的时候,每次增加20个字符空间。这样会增加效率。\\x0d\\x0a\\x0d\\x0a象你这样:初始p=(char*)malloc(10);\\x0d\\x0a当判断空间不够用的时候,重分配:\\x0d\\x0ap=(char*)realloc(p,10+100*n++);\/\/n做重分配次数计数...

C语言实现简单动态数组
当数组有足够空间时,新元素紧随原数组空间之后。分配新空间的同时,增加count的数值。然而,当数组空间不足时,我们需要重新分配空间并增加capacity。为此,需要一个名为reaalloc()的内存分配函数。为了提高程序运行效率和方便,我们可以使用宏定义来增加capacity,同时用宏定义封装realloc()函数,以减少函数调...

C语言问题
2. 动态申请的空间大小很好控制, 可以用变量来参与运算, 用完释放就是了, 而且中间发现开小了, 可以扩大, 发现开大了可以缩小.3. 栈一般比较小, 不能开辟很大的数组, 而堆都是很大的, 可以用这种方式申请很大的数组.比如int a[10000000]; 极有可能栈溢出了, 而int *a = malloc(sizeof(int) ...

在c语言中如何实现数组的动态输入?
另外,使用malloc或realloc申请时,需要先判断下返回值是否为空,如有异常申请失败,用空指针直接使用,会造成程序错误。下面简单示范:(初始申请2个字节,之后每次输入字符扩展1个字节,回车结束输入)include <stdio.h> include <malloc.h> int main(){ int len=2;char *a=NULL,*aSave=NULL,c;a...

c语言怎样做出一条动态的龙?
这是一般动态数组模块的普遍做法。但效率很低。例如下面方法都是重新分配更长的数组空间:int* a=(int*)malloc(n*sizeof(int));\/\/n是数组的大小。int* a=(int*)calloc(n,sizeof(int));\/\/n是数组的大小。int* a=(int *)realloc(a,m*sizeof(int));\/\/m新数组的大小。

C语言-动态分配内存 malloc & free
需要先计算需要多少字节的内存空间 数组举例子:释放的时候需要注意, 因为在for循环执行之后,p的地址往前移动了10, 所以需要减去10, 然后再释放p,不然会有问题 \/\/ 当销毁时只需要free一次,malloc了几个字节就会free几个字节,和char类型还是int类型无关 free(p);在一个函数中动态分配的内存,...

在C语言中,如何释放动态数组里面某一个元素所在的内存?
删除就是将其下标所在位置的中的内容置为空(也就是0),然后从此位置开始,后面的内容前移,再把最后那个位置的置为空(就是0)。前移无非就是 类似 arr[i-1]=arr[i]这个意思。当可以确认数组中存放的都是整数,你可以将这个元素置为-1表示删除。增加就是先检查你的数组中有没有-1的元素,...

C语言,什么时候需要开辟空间
其实写一个函数,开头的声明变量或数组就是在开辟空间,所以只要写代码,开辟空间的事肯定就少不了。但你这里说的我想应该是指“动态开辟空间”。动态开辟空间一般在以下情况下进行:编程时不知道需要多大的空间,要在程序运行时由用户输入大小或计算出所需大小;一些数据量太大,栈区放不下,需要创建在...

相似回答