c++定义数组 c++数组长度
其实c++定义数组的问题并不复杂,但是又很多的朋友都不太了解c++数组长度,因此呢,今天小编就来为大家分享c++定义数组的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
c++中怎样定义动态数组
1、new动态定义数组
2、因为new就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间。这样,下面的语句:
intsize=50;
int*p=newint[size];//是正确的3、但是二维动态数组能不能也这样定义呢
intsize=50,Column=50;
int(*p)[Column]=newint[size][Column](1)首先 new int[size][Column]就是动态生成时确定的,所以它没有错,那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢,那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column不是常数,因此不能通过编译。
(2)而之所以编译器认为Column不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column是个变量。所以上面的二维数组定义是错误的,它不能通过编译。
改成这样:
intsize=50
int(*p)[50]=newint[size][50]便正确了。
C++中怎么用new函数定义一个二维数组
假设a,b为两个int型变量,如果希望这样生成一个二维数组:new int[a]<b>,是不会得到编译器允许的——因为没有指定这个数组的元素类型。
由于b的大小未知,编译器无法确定‘int<b>’到底是一个什么类型。所以,要用new创建一个二维数组。
方法一:使用常量
接上:如果将b指定为一个常量,例如new int[a][5],其实质与new int[a]创建一个动态数组并无多大区别——只是元素类型由int变为了'int[5]'而已。
示例代码:
void TestFunc_(unsigned int n)
{
unsigned int i,j;
//元素类型为‘int[5]’的数组,可赋值给‘int[5]’类型的指针.
int(*array2D)[5]=new int[n][5];
for(i=0;i<n;++i)
{
for(j=0;j<5;++j)
{
array2D<i>[j]=i*5+j;
}
}
//回收方法和普通动态数组相同,使用'delete[]'即可
delete[]array2D;
}
用这个方法来创建二维数组,比较直观、易用,但它最大的限制在于:你必须在编译时确定b的大小。
方法二:使用指针间接引用
首先创建若干个大小一致的动态数组,然后将这些数组的首地址(转化为指针)按顺序存储到一个动态数组中,就相当于模拟了一个二维动态数组。
示例代码:
void TestFunc_pointer(unsigned int height,unsigned int width)
{
unsigned int i,j;
//数组的元素类型为‘int*’,可赋值给指向‘int*’的指针.
int**array2D=new int*[height];
for(i=0;i<height;++i)
{
array2D<i>=new int[width];
}
//访问.
for(i=0;i<height;++i)
{
for(j=0;j<width;++j)
{
//内存非连续,注意防止越界.
array2D<i>[j]=i*width+j;
}
}
//首先回收低一级的动态数组.
for(i=0;i<height;++i)
{
delete[]array2D<i>;
}
//然后回收高一级的动态数组.
delete[]array2D;
}
方法三:使用vector
借助STL中的vector,我们可以很直观的创建一个二维数组,而不需要用到基本数组的概念。
示例代码:
void TestFunc_vector(unsigned int height,unsigned int width)
{
typedef std::vector<int>IntVector;
typedef std::vector<IntVector>IntVector2D;
unsigned int i,j;
IntVector2D*pArray2D=new IntVector2D;
//动态设置大小.
pArray2D->resize(height);
for(i=0;i<height;++i)
{
(*pArray2D)<i>.resize(width);
}
for(i=0;i<height;++i)
{
for(j=0;j<width;++j)
{
(*pArray2D)<i>[j]=i*width+j;
}
}
delete pArray2D;
}
C++中定义字符型数组问题
定义char a[5],则说明,a是个字符数组,在内存中占五个字节空间
如果用a来存储字符串,则最多只能有4个有效字符,必须给\0留个空间。
计算a的长度与a的大小是不同的概念
a按字符串来算长度是从a这个地址开始,计数到\0字符,这之间的字符个数是字符串a的长度。
一般常用strlen()函数来获取字符串长度。
计算a的大小用sizeof命令,sizeof(a)得到的是a在内存中占的字节数!
字符串与字符数组不要混为一谈。它们相同在形式上,区别就在,字符串一定有\0结束符,而数组不需要!
什么是字符串?就是以双引号引起来的数据才叫字符串。字符数组可以存储字符串!
关于c++定义数组,c++数组长度的介绍到此结束,希望对大家有所帮助。