问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间: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>
#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;
}

热心网友 时间:2022-06-30 02:32

如楼上所言,用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.但是这样申请到的空间往往要受栈空间大小的*.不宜开辟过大的数组.

热心网友 时间:2022-06-30 02:32

不能定义动态的数组
数组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;  
 }

热心网友 时间:2022-06-30 02:33

这样是不行的,你可以定义一个相对大一点的空间,比如int arry(100);保证a<100;

热心网友 时间:2022-06-30 02:33

int array[a];//这表示定义一个整形 a位 的数组
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 急求C程序题:写出输出整数数组的宏定义,要求数组元素个数和一行输出多少个整数作为宏的形参。 宏定义: ARR2_NUM(a)(返回二维数组的元素个数) ARR2_COL_NUM(a)(返回二维数组的列数) 定义一个宏ELEMENTS(array),求出给定数组中的元素的个数。急,在线等 已知一个数组table,用一个宏定义,求出数据的元素个数,sizeof(table)&#47;sizeof(0),为什么要除sizeof(0) 用宏定义,求数组的元素个数 已知一个数组table,用一个宏定义,求出数据的元素个数 用宏定义 求 数组的元素个数 怎么做啊 谢谢 电压力锅浮子阀工作时候漏气? 电高压力锅的浮子阀密封圈是什么样子 美的电压力锅浮子是什么样的 有谁知道OPPO A11支持的网络类型都有哪些? oppoa11支持联通几g网络 股票怎么看大盘?股票的要领是哪些? 股票中什么叫大盘,什么是个股.怎样看大盘怎样看个股?请高手指点.谢谢 股市大盘在那看?看大盘有什么作用? oracle的完全备份能当作0级备份来恢复数据吗 请问手机没电了想打电话怎么办? 现在的高德地图不如以前好用了,箭头指示看不太清了,特别是分道提示,原来有*箭头老远就提示? 如果手机没电了,如打电话给对方? 请间我的汽车没电了找谁可以帮我? c语言如何取数组元素个数? 编写程序,定义一个含有30个元素的int型数组。依次给数组元素赋奇数1、3、5......, c程序语言,数组,求编程实现 c语言中可不可以用变量定义数组的个数 c语言的一个问题,关于定义数组的 vba中,怎样使数组的元素个数从n个变为n+1个? vb题目,有关数组中的元素个数的 c语言中使用常量定义数组元素个数为什么只能用#define? c语言中数组元素的个数可以不固定吗? C语言实现宏定义数组增加长度,不用指针 爱奇艺电视的网址 奇艺网高清电视剧有什么? 为什么用奇艺网看电影看一会就不能看了,还的重启浏览器?? 为什么我的电脑老是自动休眠和自动关机(不是温度问题 苏康码到一个省份都要换吗 我去外省,不带手机,因为带老人去上海看病,又怕影响孩子9.1上学,苏康码轨迹受影响吗? 我们发在朋友圈的照片,谁知道怎样设置不被别人下载吗? 我想请问一下就是那个我的常州里面的苏康码到外地也好用吗? 我的苏康码是绿码行程码上有安徽省滁州市我要做全民核算可以吗 我发朋友圈为什么复制了过去粘贴不了?