如何定义一个动态的数组
例如,定义一个a[10],但是scanf()输入的时候不输入10个元素,输入小于10个的元素,要怎么做呢...
例如,定义一个a[10],但是scanf()输入的时候不输入10个元素,输入小于10个的元素,要怎么做呢
展开
5个回答
展开全部
如果楼主使用的是C++编程,那么不推荐你这么做。推荐你使用vector来做这件事情。
不过看起来使用的C来编程的,
这里你定义了a[10],但是没有输入足够的元素,这个不会出问题。
这个数组中只有前几个是你输入的值,没有得到输入的就是系统给的默认值。
定义动态数组,在C中使用的是malloc函数。
例如:
int *a = (int*)malloc(sizeof(int) * 10);
这个几乎和 int a[10]; 等价。
不过这里使用malloc是显示分配内存,所以需要使用free函数显示的进行销毁。(堆中分配)
但是,int a[10] 的形式,是在栈中分配,当程序运行超出了这个变量的生存范围,这个数组会自行销毁的。
更多追问追答
追问
那如果用scanf的时候,输入数组元素的值的时候,回车会结束赋值么?
追答
如果scanf函数不在一个循环里面,只有单独的一句。
例如这个程序(program 1), 当你第一次按下回车后,就会结束赋值:
int main () { // program 1
int a[10];
scanf("%d", &a[0]);
}
例如这个程序(program 2), 当你第一次按下回车后,不会结束赋值;而会进入到第二个赋值过程中...依次类推,只到第10次:
int main () { // program 2
int a[10], i;
for ( i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
}
如还有问题,请追问。
TableDI
2024-07-18 广告
2024-07-18 广告
在Excel中,字符串匹配函数主要用于查找和定位特定字符串在文本中的位置或进行替换操作。常用的字符串匹配函数包括FIND、SEARCH、SUBSTITUTE和REPLACE等。FIND和SEARCH函数用于查找字符串的位置,而SUBSTIT...
点击进入详情页
本回答由TableDI提供
展开全部
#include<iostream>
using namespace std;
int main()
{
int len;
cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int *p=new int[len];
...........
delete[] p;
return 0;
}
using namespace std;
int main()
{
int len;
cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int *p=new int[len];
...........
delete[] p;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果使用的是C语言的话, 用malloc函数, 定义动态数组。
例如:int *a = (int*)malloc(sizeof(int) * 10); // 分配10个int类型的数组, 同int a[10]
普通数组分配在栈(stack)里面, 由变压器统一分配和回收. 动态数组则定义在堆(heap)里面, 分配后要调用用free函数释放内存, 以免造成内存泄漏. 其它编程语言都可以查找相应的分配/释放函数, 但其本质都是分配在堆里面.
例如:int *a = (int*)malloc(sizeof(int) * 10); // 分配10个int类型的数组, 同int a[10]
普通数组分配在栈(stack)里面, 由变压器统一分配和回收. 动态数组则定义在堆(heap)里面, 分配后要调用用free函数释放内存, 以免造成内存泄漏. 其它编程语言都可以查找相应的分配/释放函数, 但其本质都是分配在堆里面.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a[5]数组中 5表示a数组中有5个元素,分别是a[0],a[1],a[2],a[3],a[4].
在sum=a[0]+a[1]+a[2]+a[3]+a[4]+a[5] 公式中严格的讲
将会出现‘下标越界’或‘上标越界’的错误(在不同的语言中数组的开始时不一样的!例如:c是 0开始;basic是1开始的!)!但是分在什么里面运行里!
而a[5]的值到底是多少呢?
就要知道,这个数组是如何在内存中存储的了!
数组如何在内存中存储,就要知道,数组是什么类型的?
不同的类型占用不同内存的大小!
例如: 地址:&1205 存储的 是a[4]的值,数组a是一个整形!
那a中的每一个元素占用的内存大小就是4字节,那么总共开辟的空间便是20字节的内存大小!
a[5]就是这20字节内存中,后面的4字节中得值。
a数组后面的4字节的值是多少呢?
谁也不知道?
只有内存知道!嘿嘿!
所以a[5]是一个不可预料的值!
在sum=a[0]+a[1]+a[2]+a[3]+a[4]+a[5] 公式中严格的讲
将会出现‘下标越界’或‘上标越界’的错误(在不同的语言中数组的开始时不一样的!例如:c是 0开始;basic是1开始的!)!但是分在什么里面运行里!
而a[5]的值到底是多少呢?
就要知道,这个数组是如何在内存中存储的了!
数组如何在内存中存储,就要知道,数组是什么类型的?
不同的类型占用不同内存的大小!
例如: 地址:&1205 存储的 是a[4]的值,数组a是一个整形!
那a中的每一个元素占用的内存大小就是4字节,那么总共开辟的空间便是20字节的内存大小!
a[5]就是这20字节内存中,后面的4字节中得值。
a数组后面的4字节的值是多少呢?
谁也不知道?
只有内存知道!嘿嘿!
所以a[5]是一个不可预料的值!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int(*a)[80];
a=new int[n] [80];
a=new int[n] [80];
追问
看不懂诶
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |