社区
C语言
帖子详情
怎么改变数组a的大小
wowowowo
2003-10-02 12:06:46
编一个函数把数组a的大小从size变成ToSize。
...全文
244
19
打赏
收藏
怎么改变数组a的大小
编一个函数把数组a的大小从size变成ToSize。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wolf0403
2003-10-03
打赏
举报
回复
void ChangeSize1D(T *&a,int size,int ToSize){
if(size>ToSize){
cerr<<"size>ToSize"<<endl;
exit(1); // 改成 return;
}
int *b=new int[4]; // What's the 4 mean? Should be =new int[ToSize]
for(int i=0;i<size;i++){
b[i]=a[i];
}
delete []a;
a=b;
}
而且按照这个写法,原先所有指向该数组的指针全部成为野指针了。
建议先拷贝到临时数组,然后用 placement new 进行重新分配、复制。
wowowowo
2003-10-03
打赏
举报
回复
我写的一个函数把数组a的大小从size变成ToSize 大家帮我看看有错吗?
#include<iostream>
using namespace std;
template<class T>
void ChangeSize1D(T *&a,int size,int ToSize){
if(size>ToSize){
cerr<<"size>ToSize"<<endl;
exit(1);
}
int *b=new int[4];
for(int i=0;i<size;i++){
b[i]=a[i];
}
delete []a;
a=b;
}
void main()
{
int *a=new int[3];
a[0]=0;a[1]=1;a[2]=2;
cout<<a[0]<<a[1]<<a[2]<<endl;
ChangeSize1D(a,3,4);
a[3]=3;
cout<<a[0]<<a[1]<<a[2]<<a[3]<<endl;
delete []a;
}
Wolf0403
2003-10-03
打赏
举报
回复
栈上的数组是没法更改大小的
堆上的数组可以通过 placement new 来重新分配,等于在指定的位置重新分配。TC++PL 只说了 placement object ,没有提到 placement array。不过我猜测整个数组就是在原来位置被重新分配,数据没有保留。
如果没记错,C 的 ralloc 是保留原来数据的
elvahuang
2003-10-03
打赏
举报
回复
这样定义的数组 大小没法改了吗
int a[10];
对 这是被称为静态分配 固定了的 是不能改变的 原因是编译...
junmayang
2003-10-03
打赏
举报
回复
数组大小从定义开始不能变的吧
wowowowo
2003-10-03
打赏
举报
回复
这个呢?
#include<iostream>
using namespace std;
template<class T>
void ChangeSize1D(T *&a,int size,int ToSize){
if(size>ToSize){
cerr<<"size>ToSize"<<endl;
return;
}
T *b=new(a) T[ToSize];
a=b;
}
void main()
{
int *a=new int[3];
int *v=a;
a[0]=0;a[1]=1;a[2]=2;
cout<<a[0]<<a[1]<<a[2]<<endl;
cout<<v[0]<<v[1]<<v[2]<<endl;
ChangeSize1D(a,3,4);
a[3]=3;
cout<<a[0]<<a[1]<<a[2]<<a[3]<<endl;
cout<<v[0]<<v[1]<<v[2]<<v[3]<<endl;
}
siegf
2003-10-03
打赏
举报
回复
为什么不用vector 呢 不停地 push_back 不就解决了,多省心啊。
lemon520
2003-10-02
打赏
举报
回复
参考vector呀,多方便!
wowowowo
2003-10-02
打赏
举报
回复
delete [] a 适用于动态分配的数组吧
yjf7888
2003-10-02
打赏
举报
回复
指针可以realloc,数组可能不行哦。
darcymei
2003-10-02
打赏
举报
回复
dele[]a
a=new ELEM[ToSize]
wxt2301
2003-10-02
打赏
举报
回复
由数组的物理存储结构决定。如果你在C中直接用类似int a[2],那么就不能改变的。如果你想改变,你需要自建数据结构!看一下数据结构的书就明白了。
danielhf
2003-10-02
打赏
举报
回复
1, 对栈中的数组, 重新建一个tosize大小的数组,把原来的拷过来.
2, 对堆中的数组, 直接分配即可 T *a = new T[tosize];
wenjhua
2003-10-02
打赏
举报
回复
//
dele[]a
a=new ELEM[ToSize]
一楼的好象是错解.
我怎么试了半天还是没有成功啊
好象这个int a[10]
是不能改的吧
如果是 指针的话就行
!~~~~等待高人
努力学习的小白小白小白
2003-10-02
打赏
举报
回复
你可以使用
char *array=new char[size];类似于array【size】;不过使用完了应该delete 【】array
现在你可以这样
array=realloc(array,Tosize);
最后delete 【】array;
xghost
2003-10-02
打赏
举报
回复
用容器类vector
wowowowo
2003-10-02
打赏
举报
回复
这样定义的数组 大小没法改了吗
int a[10];
wenkejiujiu
2003-10-02
打赏
举报
回复
在ANSI C89中如果是数组,一旦定义了数组的大小,就改边不了了
如果在c中要改变使用的数据存储大小,可以有很多方法,比如动态分配
还有在c++中就更方便了!
rockhard
2003-10-02
打赏
举报
回复
如果数组定义形式如:
int a[20];
想增大a所指的内存区大小基本上不可能。
数组
的使用及
数组
的
大小
文章目录前言一、通过下标使用二、遍历
数组
三、元素赋值四、
数组
的
大小
1.
数组
的
大小
总结 前言 本文主要简单的介绍一下一维
数组
的使用方法。 一、通过下标使用 下标从0开始,依次递增。形式:
数组
名加下标。 与定义的区别 一个叫
数组
,一个叫下标运算 区分 有没有类型 一个是元素个数,一个代表具体元素的下标 代码: #include<stdio.h> int main(void) { int a[3] = { 0,1,2 }; printf("%d\n",a[0]);//打印
数组
的第一个元
Matlab:基本运算的
数组
大小
兼容性
它允许我们在某些运算中,将一个较小的
数组
自动扩展为与较大
数组
具有相同
大小
的
数组
。这使得我们可以对不同
大小
的
数组
执行元素级别的运算,而无需事先手动调整它们的
大小
。在Matlab中,进行基本运算时,
数组
的
大小
是一个重要考虑因素。因此,了解如何处理不同
大小
的
数组
是非常重要的。通过
数组
自动广播、函数处理和显式调整
大小
,我们可以灵活地进行基本运算,而无需手动调整
数组
的
大小
。除了
数组
自动广播外,Matlab还提供了许多函数来处理不同
大小
的
数组
。函数可以用于重新调整
数组
的
大小
,而不
改变
数组
中的元素。
C语言,
数组
的类型,
大小
C语言,
数组
的类型,
大小
前言
数组
可以存放很多元素,可是如何计算
数组
的
大小
呢? 一、
数组
的类型 int a[ 5 ] ={1,2,3,4,5};
数组
的类型:int [5], 去掉变量名,就是
数组
的类型,这就是5个int 类型元素的
数组
类型。 例如: double [20] ,float [4] 等等,都是不同类型的
数组
。 二、
数组
的
大小
计算
数组
的
大小
,需用 sizeof 函数。
数组
的
大小
就是所有元素的
大小
之和。 口算:例如:int a[5] 的
大小
就是 sizeof(int)*5为20
如何调整
数组
大小
如何调整
数组
大小
选择用
数组
表示栈内容意味着用例必须预先估计栈的最大容量。在Java中,
数组
一旦创建,其
大小
是无法
改变
的,因此栈使用的空间只能是这个最大容量的一部分。选择大容量的用例在栈为空或几乎为空时会浪费大量的内存。例如,个交易系统可能会涉及数十亿笔交易 和数千个交易的集合。即使这种系统般都会限制每笔文易只能出现在一个集合中, 但用例必须保证所有集合都有能力保存所有的交易。另一方面,如果集合变得比
数组
更大那么用例有可能溢出。为此,push() 方法需要在代码中检测栈是否已满,我们的API中也应该含
数组
的
大小
计算一个
数组
的
大小
可以利用sizeof;sizeof给出整个
数组
所占内容的
大小
,单位为字节。 计算时可用sizeof(a)/sizeof(a[0]),优点:一旦修改
数组
中的初始数据,不需要修改遍历的代码。
数组
变量本身不能被赋值,因此要把一个
数组
的元素交给另一个
数组
必须要用遍历的方法 例:for(i=0;i<=j;i++) b[i]=a[i];
数组
作为参数时,不能在[]中给出
数组
的
大小
,不能再利用sizeof计算
数组
中元素的个数,往往必须利用另一个参数来传入
数组
的
大小
。 //查找一个数字
C语言
70,035
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章