我用C语言编程时,要定义一个数组,元素个数为a,a是在程序运行过程中得到的一个数,我用这个a定义数组:int arry(a);调试提示错误,请问该怎么解决?
Cè¯è¨ä¸æ°ç»çç»´æ°è¡¨ç¤ºæ°ç»ä¸å ç´ ç个æ°ï¼å¨å¸¸è§æ°ç»ä¸ç»´æ°æ¯å¿ é¡»è¦ææçï¼å¦æ没æææï¼åå¿ é¡»å¨åå§åå表ä¸ç»å®åå§å¼ï¼ç¼è¯å¨éè¿åå§åå表æ¥ç¡®å®æ°ç»çç»´æ°ã
int a[] = {1,2,3,4};
ä¸é¢ç代ç è½ç¶æ²¡ææææ°ç»çç»´æ°ï¼ä½æ¯ç¼è¯ç¥éæ°ç»açç»´æ°æ¯4ï¼åªæ4个å ç´ )ã
è¦å®ç°ç¨åéå®ä¹æ°ç»çå ç´ ä¸ªæ°å³ç»´æ°ï¼å¯ä»¥ä½¿ç¨malloc()åfree()æ¥è¿è¡å¨æå ååé ãä¸é¢æ¯ä¸ä¸ªä½¿ç¨å¨æå åç示ä¾ï¼
#include <stdio.h>int *arr = new int[a];
这个语句是不是就相当于int arr[a];(如果这样合法的话)
不是! 这里牵涉到一个新的问题.那就是堆和栈的问题.前者是自己管理的内存空间,后者是操作系统管理的空间.以new申请的空间总是在堆上面分配,需要手工释放(delete),int arr[a]则是申请在栈上面,你不用手工delete.但是这样申请到的空间往往要受栈空间大小的限制.不宜开辟过大的数组.
本回答被提问者采纳这样是相当于直接把NUM的值定为了5是吧?但是我预先不知道NUM的值的怎么办?
追答那就想别的办法
一种办法是可以先定义一个大数组 保证输入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;
}