c语言 动态数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 动态数组相关的知识,希望对你有一定的参考价值。
下列程序的功能是动态分配数组存储空间,输入数据并输出,请填空完成该程序。
#include <stdio.h>
#include <stdlib.h>
int main()
int num,*p=0,i;
printf("输入数组元素个数:");
/*输入数组元素个数,保存到变量num中*/
/*动态分配数组存储空间*/
/*输入数据*/
/*输出数据*/
/*删除动态创建的数组*/
return 0;
#include <stdlib.h>
int main()
int num,*p=0,i;
printf("输入数组元素个数:");
/*输入数组元素个数,保存到变量num中*/
scanf("%d",&num);
/*动态分配数组存储空间*/
p = (int *)malloc(sizeof(int)*num);
/*输入数据*/
for(i=0;i<num;i++)
scanf("%d",&p[i]);
/*输出数据*/
for(i=0;i<num;i++)
printf("%d ",p[i]);
/*删除动态创建的数组*/
free(p);
return 0;
参考技术A C语言没有动态数组的概念,所谓动态数组,就是在使用过程中,大小可以任意改变的数组,但是C语言中的数组,只要一旦声明就无法再更改大小,所以一般都会把数组大小设置的比较大一点,但是这样会造成资源浪费,变量又不能作为数组的下标,为了应对这种问题,需要指针的帮忙.指针可以用变量作为参数,申请一段固定大小的内存空间, 格式为: int *p; p=(int *)malloc(变量*sizeof(int));
这时 p指针的作用就相当于 数组名(其实数组名也就是一个指针).希望可以帮到你 参考技术B /*输入数组元素个数,保存到变量num中*/
scanf("%d", &num);
/*动态分配数组存储空间*/
p = (int *)malloc(num * sizeof(int));
/*输入数据*/
printf("请输入%d个整数:", num);
for(i = 0; i < num; i++)
printf("%d个:", i + 1);
scanf("%d", p + i);
/*输出数据*/
printf("输入的数组是:");
for(i = 0; i < num; i++)
printf("%3d", *(p + i));
/*删除动态创建的数组*/
free(p); 参考技术C 加上头文件iostream.h后用下面的。
cin>>num;
int *pp = new int[num];
for(int i=0; i < num; i++)
cout<<"input number,第"<<i<<"个数";
cin>>pp[i];
for(int i=0; i < num; i++)
cout<<"第"<<i<<"个数"<<"为:"<<pp[i]<<endl;
delete pp; 参考技术D 建议你问你们家计算机老师吧。
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函数
参考技术A 数据结构专门有讲的,下几个课件看看就行了.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);
追问
是动态数组存储空间的扩充,不是用到链表这些存储结构的扩充
参考技术B 那我改下之前的回答,你的意思就是要做个内存管理堆栈系统嘛。可以考虑这么做。
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加上你输入数据的大小就可以了。本回答被提问者采纳 参考技术C 什么叫动态数组,C的都是指定好下标的数组 参考技术D 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语言 动态数组的主要内容,如果未能解决你的问题,请参考以下文章