c++中怎样定义动态数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中怎样定义动态数组相关的知识,希望对你有一定的参考价值。
1、new 动态定义数组
2、因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间。这样,下面的语句:
int *p=new int[size]; //是正确的
3、但是二维动态数组能不能也这样定义呢
int (*p)[Column]=new int [size][Column]
(1)首先 new int[size][Column] 就是动态生成时确定的,所以它没有错,那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。
(2)而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。
改成这样:
int (*p)[50]=new int [size][50]
便正确了。
intlen;cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int*p=newint[len];
...........delete[]p;
return0;
注意int*p=newint[len];
这一句,你不能这样做:intp[len];
C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:intp[]=newint[len];编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int*p=newint[len] 参考技术B 最简单的办法是使用STL库中的vector。
如果用VC,也可以用CArray。
自己定义的话可以参考vector或CArray的代码。
思路是:首先是动态申请一块内存,然后根据需要插入删除数据项或重新申请更大的内存并拷贝数据。 参考技术C 也可以用new和delete动态分配内存 参考技术D 你可以用vector<char>
C++中 ,一个数组是否可以连续存储不同数据类型的多个数据啊?如果可以,应该怎样存呢?
我是新手,望高手指点!!
一般的数据是不行的,但有一种数据类型叫做共用体,可用来存不同类型的数据。定义方法的例子如下:union icf
int i; char c; float f; ;
icf arrDate[5];
arrDate[0].i=3;
arrDate[1].c='a';
arrDate[2].f=4.3;
则arrDate的第一个元素中存的是整型,第二个元素中存的是字符型,第三个元素中存提浮点型。 参考技术A 额,数组中的数据类型应该都是一样的。如果有不同数据类型的,可以定义一个struct,其中包含了你想要的数据类型,然后定义struct数组就行了。本回答被提问者采纳 参考技术B 理论上说是不可以,数组是一组同类型的数据的集合。 参考技术C #include <stdio.h>
int main(void)
char tmp [100];
tmp[0] = 'A';
*(int *)(&tmp[1]) = 23;
*(float *)(&tmp[5]) = 23.0f;
printf("%c %d %f\n", tmp[0], *(int *)(&tmp[1]), *(float *)(&tmp[5]));
return 0;
最好别这样,虽然内存中才不管你存什么
以上是关于c++中怎样定义动态数组的主要内容,如果未能解决你的问题,请参考以下文章