C语言如何定义动态数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何定义动态数组相关的知识,希望对你有一定的参考价值。
不要那种手动输入数组长度的,
intmain(void)
int*number,n,m,i;
printf("thetotalnumbersis:");
scanf("%d",&n);
printf("backm:");
scanf("%d",&m);
number=(int*)malloc(n*sizeof(int));
printf("input%dintegers:",n);
for(i=0;i<n;i++)
scanf("%d",&number[i]);
扩展资料
动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以随程序需要而重新指定大小。
动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。使用动态数组的优点是可以根据用户需要,有效利用存储空间。
参考技术A 360问答C语言中怎样定义动态一维数组
ruisiteng LV12
2013-09-08
用calloc或者malloc做。 因为 int n; int a[n]; 这个操作是不合法的,, 所以要用到分配内存的函数,, 请各位大虾来帮帮手。
满意答案
qt5841
LV12
2013-09-09
在C语言中,数组的定义都是固定长度的,长度不允许变化。
可以通过链表的方式来达到定义”动态数组“的等价功能,举例如下:
链表节点定义如下:
struct node
int data; // 数据域
struct node *next; // 指针域
;
存放数据时可以对节点中的node赋值即可,如:
struct node *p; // 定义一个链表节点
p->data = 3; // 存放第一个数据
p = p->next;
p->data = 5; // 存放第二个数据
这样,需要存放多少个数据就可以动态定义了,相当于实现了动态数组的功能。 参考技术B C语言没有动态数组的概念,所谓动态数组,就是在使用过程中,大小可以任意改变的数组,但是C语言中的数组,只要一旦声明就无法再更改大小,所以一般都会把数组大小设置的比较大一点,但是这样会造成资源浪费,变量又不能作为数组的下标,为了应对这种问题,需要指针的帮忙.指针可以用变量作为参数,申请一段固定大小的内存空间, 格式为: int *p; p=(int *)malloc(变量*sizeof(int));
这时 p指针的作用就相当于 数组名(其实数组名也就是一个指针).希望可以帮到你 参考技术C #include <stdio.h>
#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;
参考技术D C语言定义动态数组需要用到动态内存分配函数,参考代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
int *a=NULL,n,i;
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
for(i=0;i<n;++i)
a[i]=i;
for(i=0; i<n; ++i)
printf("%d ",a[i]);
free(a);
a=NULL;
return 0;
c语言中如何自定义数组长度
我想让用户自己来输入需要多少个数,怎样定义数组,来达到这样的效果?
因为数组长度不能用未知数,所以不知道该怎么实现。
请达人帮忙~~ 谢谢!
动态分配的数组可以自定义数组的长度,示例如下:
#include <stdio.h>#include <string.h>
#include <stdlib.h>
int main()
printf("输入要分配的内存大小:");
int size;
scanf("%d", &size); //输入自定义的数组长度
int *pstart = (int *)malloc(sizeof(int) *size);
if (pstart==0)
printf("不能分配内存\\n");
return 0;
memset(pstart, 0x00, sizeof(int) * size);
int inx;
for (inx=0; inx!=size; ++inx) pstart[inx] = inx;
for (inx=0; inx!=size; ++inx) printf("%d\\t", pstart[inx]);
printf("\\n");
return 0;
参考技术A C99标准支持不定长数组(代价是不能用goto语句)。在输入语句后声明就可以了。
不过现在的编译器对C99的支持都不好```
对于ANSI C(C89)一般的编译器都支持。不过数组长度必须是编译期确定的常量,运行时不能改变。所以采用动态分配实现。
例如
#include<stdio.h>
#include<stdlib.h>/*这个头文件在用malloc和free等分配内存函数时必须被包含*/
int main()
int n,*a=NULL;
printf("Please input the num of elements:\n");
scanf("%d",&n);
if(!(a=(int *)malloc(n*sizeof(int)))
printf("Memory is not accessed!\n");
exit(1);/*内存分配失败时异常退出。也需要stdlib.h*/
/*如下使用方法实质是相同的*/
scanf("%d",a[0]);
scanf("%d",a+0);
/*这里写代码*/
free(a);
/*用完之后需要释放,否则会造成内存泄漏*/
return 0;
其它还有calloc、realloc等,C++里也可以用new、delete等运算符(如 confuciuskg 所述),具体用法可以直接百度。
参考资料:原创+引用
参考技术B 采用动态分配即可实现,例如:#include<iostream>
using namespace std;
void main()
int* pArray = NULL; //动态数组
int N; // 动态确定的数组个数
cout << "Please input the number of element in the Array: ";
cin >> N; // 从屏幕中输入数组元素个数
pArray = new int[N]; // 根据N的大小动态分配内存
int i;
for(i = 0; i < N; i++)cin >> pArray[i]; // 从屏幕中依次输入数组元素
cout << "The elements of the Array you inputed is:\n "; // 依次输出这个数组
for(i = 0; i < N; i++)cout << pArray[i] << endl;
delete pArray; // 释放动态分配的内存
参考技术C 数组不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。
例如:
#define FD 5
main()
int a[3+2],b[7+FD];
……
是合法的。
但是下述说明方式是错误的。
main()
int n=5;
int a[n];
……
但是,数组可以超界使用。本回答被提问者采纳 参考技术D int *p=NULL,n;
printf("Please input the num of elements:\n");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
if(!p)
printf("Memory is not accessed!\n")
else
/*
这里你就可以自由使用了,这个我是屡试不爽啊!哈哈 */
以上是关于C语言如何定义动态数组的主要内容,如果未能解决你的问题,请参考以下文章