C语言怎么用变量定义来数组元素个数?

我用C语言编程时,要定义一个数组,元素个数为a,a是在程序运行过程中得到的一个数,我用这个a定义数组:intarry(a);调试提示错误,请问该怎么解决?... 我用C语言编程时,要定义一个数组,元素个数为a,a是在程序运行过程中得到的一个数,我用这个a定义数组:int arry(a);调试提示错误,请问该怎么解决? 展开
 我来答
吉祥二进制
高粉答主

推荐于2017-10-06 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84573

向TA提问 私信TA
展开全部

C语言中数组的维数表示数组中元素的个数,在常规数组中维数是必须要指明的,如果没有指明,则必须在初始化列表中给定初始值,编译器通过初始化列表来确定数组的维数。

int a[] = {1,2,3,4};

上面的代码虽然没有指明数组的维数,但是编译知道数组a的维数是4(只有4个元素)。


要实现用变量定义数组的元素个数即维数,可以使用malloc()和free()来进行动态内存分配 。下面是一个使用动态内存的示例:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int size;
    printf("输入建立元素的个数:");
    scanf("%d",&size);
    int *p = (int *)malloc(sizeof(int) * size);
    if (p == 0) {
        printf("不能分配内存\n");
        return 0;
    }
 
    //初始化内存
    memset(p, 0x00, sizeof(int) * size);
    //释放内存
    free(p);
    return 0;
}
duzhanzxs
推荐于2017-09-18 · TA获得超过341个赞
知道小有建树答主
回答量:264
采纳率:0%
帮助的人:249万
展开全部
如楼上所言,用malloc函数即可.
如下:
int *arr = new int[a];//a个整形元素
事实上,c99标准已经支持动态数组.你可以直接int arr[a];(其中a是运行时得到的)
vc6里面不支持c99标准,所以不能这样用.许多主流编译器如gcc都已经支持该用法.
追问
int *arr = new int[a];
这个语句是不是就相当于int arr[a];(如果这样合法的话)
追答
不是! 这里牵涉到一个新的问题.那就是堆和栈的问题.前者是自己管理的内存空间,后者是操作系统管理的空间.以new申请的空间总是在堆上面分配,需要手工释放(delete),int arr[a]则是申请在栈上面,你不用手工delete.但是这样申请到的空间往往要受栈空间大小的限制.不宜开辟过大的数组.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
250431615
2012-05-20 · TA获得超过635个赞
知道小有建树答主
回答量:384
采纳率:0%
帮助的人:231万
展开全部
不能定义动态的数组
数组array[ ]括号中间必须是常量
可以定义为宏定义
#define NUM 5
int array[NUM];
这种不会报错
追问
这样是相当于直接把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;  
 }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
西电_小哥
2012-05-20 · 超过17用户采纳过TA的回答
知道答主
回答量:107
采纳率:100%
帮助的人:49.3万
展开全部
这样是不行的,你可以定义一个相对大一点的空间,比如int arry(100);保证a<100;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hpj4525
2012-05-20 · TA获得超过331个赞
知道小有建树答主
回答量:479
采纳率:100%
帮助的人:334万
展开全部
int array[a];//这表示定义一个整形 a位 的数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式