发布网友 发布时间:2022-04-30 18:57
共5个回答
热心网友 时间:2022-06-30 02:31
C语言中数组的维数表示数组中元素的个数,在常规数组中维数是必须要指明的,如果没有指明,则必须在初始化列表中给定初始值,编译器通过初始化列表来确定数组的维数。
int a[] = {1,2,3,4};
上面的代码虽然没有指明数组的维数,但是编译知道数组a的维数是4(只有4个元素)。
要实现用变量定义数组的元素个数即维数,可以使用malloc()和free()来进行动态内存分配 。下面是一个使用动态内存的示例:
#include <stdio.h>
热心网友 时间:2022-06-30 02:32
如楼上所言,用malloc函数即可.追答不是! 这里牵涉到一个新的问题.那就是堆和栈的问题.前者是自己管理的内存空间,后者是操作系统管理的空间.以new申请的空间总是在堆上面分配,需要手工释放(delete),int arr[a]则是申请在栈上面,你不用手工delete.但是这样申请到的空间往往要受栈空间大小的*.不宜开辟过大的数组.
热心网友 时间:2022-06-30 02:32
不能定义动态的数组追答那就想别的办法
一种办法是可以先定义一个大数组 保证输入num小于这个大数组的个数
如:
int array[100] = {0};
printf("请输入一个小于100的数:");
int n;
scanf("%d", &n);
另一种办法是可以定义链表 不够了就malloc新的
如:
struct Node{
int data;//数据域
struct Node * next;//指针域
};
int i,n;
Node* p=(struct Node*)malloc(sizeof(struct Node));
student* q=p;
printf("输入动态的个数");
scanf("%d",&n);
for(i=1;inum));
q->next=(struct Node*)malloc(sizeof(struct Node));
q=q->next;
}
热心网友 时间:2022-06-30 02:33
这样是不行的,你可以定义一个相对大一点的空间,比如int arry(100);保证a<100;热心网友 时间:2022-06-30 02:33
int array[a];//这表示定义一个整形 a位 的数组