初始化二维数组,c++怎么初始化二维数组+char?
初始化二维数组,c++怎么初始化二维数组+char?详细介绍
本文目录一览: c++怎么初始化二维数组+char?
C++中初始化二维数组的语法如下:
类型名 数组名[行数][列数] = { {元素1, 元素2, ...}, {元素1, 元素2, ...}, ...};
其中,`类型名`表示数组元素的数据类型;`数组名`表示数组的名称;`行数`表示数组包含的行数;`列数`表示数组包含的列数;`元素`表示数组中的元素。
例如,要初始化一个包含3行、4列的整数数组,可以使用以下代码:
int array[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
如果要初始化一个包含3个字符串的char数组,可以使用以下代码:
char strArray[3][100] = { "hello", "world", "example" };
需要注意的是,这里用到了字符串字面值,它们会被自动转换为以`\0`结尾的字符串。此外,由于字符串的长度可能不确定,所以需要给每个字符串预留足够的空间。在上面的代码中,我们假设每个字符串最长不超过99个字符,因此每个字符串占用100个字符的空间。
怎样在类里用构造函数初始化二维数组
#include
using namespace std;
class matrix
{
public:
matrix(int a1[3][2])
{ for(int i=0;i<3;i++)
for(int j=0;j<2;j++)
a[i][j]=a1[i][j];
}
private:
int a[3][2];
};
void main()
{
int A[3][2] = {1,2,3,4,5,6};
matrix a(A);
}
matrix a(1,2,3,4,5,6);于matrix(int a1[3][2])
不一致。现在可以了
上述代码存在两个问题:
1. 构造函数的参数列表定义为一个`int a1[3][2]`二维数组,但是在调用时使用了6个整数(1, 2, 3, 4, 5, 6)。应该将构造函数的形参改为`int a1[3][2]`,并且调用时传入一个符合要求的二维数组。
2. 在调用构造函数时,只创建了一个`matrix a`对象,但是没有将构造函数中的参数传递给对象。应该修改为`matrix a( {{1,2}, {3,4}, {5,6}} )`,使用C++11标准中的列表初始化方式,将一个符合要求的二维数组作为参数传递给构造函数。
以下是修改后的示例代码:
```cpp
#include
using namespace std;
class matrix {
public:
matrix(int a1[3][2]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
a[i][j] = a1[i][j];
}
}
}
private:
int a[3][2];
};
int main() {
matrix a( {{1,2}, {3,4}, {5,6}} ); // 使用二维数组初始化对象
return 0;
}
```
在上述代码中,我们定义了一个类`matrix`,并在其中实现了一个接受二维数组参数的构造函数。在main函数中,我们创建了一个符合要求的二维数组,并使用其来初始化一个`matrix`对象。
运行以上代码,输出结果为空,说明程序运行正确。
这样初始化二维数组可以吗?
这个是C99标准中加入的新特性,允许数组在定义初始化时,无需顺序赋值,可对特定元素赋值,或跳跃赋值
与以前的enum枚举类型用法的定义相似
看不到具体的情况,
二维数组初始化有几种况。
可以的,因为二维数组也就是一个一维数组里面的元素是一维数组。所以,如图方法初始化二维数组是可以的。
字符的二维数组如何初始化?
二维数组初始化的基本格式:
(1)int a[3][4]={{2,6,3,9},{5,7,9,8},{1,6,4,2}};//a数组元素完全被初始化
(2)int a[3][4]={2,6,3,9,5,7,9,8,1,6,4,2};//与(1)类似,全部被初始化
(3)int a[][4]={{1,2,3,4},{5,6,7,8}};//初始化了全部数组元素,隐含了行数
(4)int a[3][3]={{6},{1,8},{1,2,3}};//给出部分数值元素的值
二维数组
二维数组又称为矩阵,本质上是以数组作为数组元素的数组。
基本介绍
定义
类型说明符 数组名[常量表达式][常量表达式]
例如:
float a[3][4],b[5][10];
定义a为3*4(3行4列)的数组,b为5*10(5行10列)的数组。注意,不能写成
float a[3,4],b[5,10];
概述
二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m,列下标从q到n,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i ? p) * n + (j ? q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j ? q) * m + (i ? p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节
二维数组又称为矩阵,行列数相等的矩阵称变方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵的所有非零元素都集中在主对角线上.
二维数组初始化的两种方式?
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int b[3][3]={1,2,3,4,5,6,7,8,9};
int c[3][3]={0};
以上三种方式进行初始化,都是可以的。
另外,还可以通过循环,对数组进行初始化赋值。
c语言有关二维数组变量初始化
二维数组可以看成特殊的一维数组,每个元素又由一个一维数组组成。
例如:构建一个maxrownum*maxrownum的矩阵
long double **data1_bfE;
data1_bfE=(long double **)malloc(maxrownum*sizeof(long double *));
for(i=0;i
<maxrownum;i++)
{
data1_bfE[i]=(long double *)malloc(maxrownum*sizeof(*data1_bfE));
}
data1_bfE[i]=(long double *)malloc(maxrownum*sizeof(*data1_bfE));动态分配maxrownum个long double的内存空间,跟long double a[5]相似,但前者是堆上分配的,后者是栈上分配的;
data1_bfE=(long double **)malloc(maxrownum*sizeof(long double *));意思就是定义一个有maxrownum个long double类型的指针的动态数组,然后在里面存放指针,相当于容器,data1_bfE就会成为指针的指针。
注意事项:C语言在定义数组和表示数组元素时常常采用a[ ][ ]的形式,使用方便,不易出错。
例如对整型二维数组a[3][2]赋值
方法一:
在定义的同时赋值
int a[3][2]={0};//所有数组元素均为0
方法二:
int a[3][2]={1,2,3,4,5,6};//常规的赋值方法
方法三:
int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
方法四:
int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,
第三行第一个元素值为3,第二个元素值为0
方法五:
int a[3][2];/先定义
for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
例如对整型二维数组a[3][2]赋值
方法一:
在定义的同时赋值
int a[3][2]={0};//所有数组元素均为0
方法二:
int a[3][2]={1,2,3,4,5,6};//常规的赋值方法
方法三:
int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
方法四:
int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,
第三行第一个元素值为3,第二个元素值为0
方法五:
int a[3][2];/先定义
for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
方法六:
int[][2]={1,2,3,4,5,6};//注意前面那个可以是空的。
方法七:
int a[3][2];/先定义
scanf("%s",a);
方法一: 在定义的同时赋值 int a[3][2]={0};//所有数组元素均为0 方法二: int a[3][2]={1,2,3,4,5,6};//常规的赋值方法 方法三: int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
int array[10][10]={0};//这是全0
或者
int array[3][3]={1,2,3,4,5,6,7,8,9};
例如对整型二维数组a[3][2]赋值
方法一:
在定义的同时赋值
int a[3][2]={0};//所有数组元素均为0
方法二:
int a[3][2]={1,2,3,4,5,6};//常规的赋值方法
方法三:
int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
方法四:
int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,
第三行第一个元素值为3,第二个元素值为0
方法五:
int a[3][2];/先定义
for(i=0;i<=3;i++) //用双重for循环赋值,i,j表示二维数组下标
for(j=0;j<=2;j++)
scanf("%d",&a[i][j]);
希望对你有所帮助。
</maxrownum;i++)
c语言二维数组初始化的三种方式
c语言二维数组初始化的三种方式
int a[3][3]={1,2,3,4,5,6,7,8,9};
int a[3][3]={{1,2,3},{4,5},{7}};
int a[3][3]={0};
c语言二维数组如何初始化
二维数组可以在定义的时候初始化,就像上面那样。
如果已经定义了一个二维数组,就不能批量初始化,必须对二维数组每个元素hao[i][j]单独进行初始化。C语言里面不能对一行数据进行初始化的。
对于一个二维数组,你可以用两层for循环,对每个元素初始化。
第一个是初始化,由编译器赋值,可以一次多个同时初始化。
下一个是赋值语句,由程序本身赋值,不允许一次赋值多个元素。
要对一行数据赋值,必须用循环语句,一个一个来。
对一行数据初始化,可以用上述方法,根据数据量的多少尽可能初始化前面的行,剩余的部分
可能填0,可能是未知数,这取决于编译器。
二维数组只能在定义的时候初始化,初始化方式如下:
char hao[][5]={
{' ',' ','*'},
{' ','*',' ','*'},
{'*',' ',' ',' ','*'},
{' ','*',' ','*'},
{' ',' ','*'} }; //第一维度没有给出,按初始化的行数,确定数组第一维度。
初始化定义:在定义变量时,同时完成对变量的初始赋值,称为变量初始化。
在定义变量以后(未初始化),再对变量值的改变操作叫赋值!所以,初始化,只能在变量定义时进行。
char hao[][5] ; //这样写是错误的,因为,这里没有初始化,第一维是空的,系统不知道如何分配变量空间!
hao[][5]={{...}} ; //这样写更是错误,此时,hao[][5]这种写法为数组元素的引用,括号中必须要有合理的下标值,不能是空,不能超过数组行列数。
1 有两种方法
(1)在定义时可以直接赋值来初始化
(2)在定义后可以为其元素一个个来赋值
2 示例
#include
void display(int arr[2][3], int row, int col){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ printf("%d ", arr[i][j]); } puts(""); } puts("");}int main(){ //方法(1) int arr1[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; //方法(2) int arr2[2][3]; int num = 1; for (int i = 0; i < 2; i++){ for (int j = 0; j < 3; j++){ arr2[i][j] = num++; } } display(arr1, 2, 3); display(arr2, 2, 3); getchar(); return 0;}3 运行结果
由结果可知,两种方式达到的效果是一样的
4 扩展
由于C语言中数组中的元素的地址是连续的,所以下面的写法也是可以的,运行效果同上
#include
void display(int arr[2][3], int row, int col){ for (int i = 0; i < row*col; i++){ for (int j = 0; j < col; j++){ printf("%d ", arr[i][j]); } puts(""); } puts("");}int main(){ //方法(1) int arr1[2][3] = { 1, 2, 3, 4, 5, 6 }; //方法(2) int arr2[2][3]; int num = 1; int *p = *arr2;//指向数组的第一个元素 for (int i = 0; i < 2 * 3; i++){ *p++ = num++; } display(arr1, 2, 3); display(arr2, 2, 3); getchar(); return 0;}
二维数组正确初始化
首先要明确几点:
1、二维数组可按行分段赋值,也可按行连续赋值。{{1,2},{0}}是按行分段赋值,{1,2,3,4,5,6}是按行连续赋值。
2、可以只对部分元素赋初值,对于int型数组,未赋初值的元素自动取0值。
3、如对全部元素赋初值,则第一维的长度可以不给出。
A,B,D选项符合以上条件,唯有C选项,是按行分段赋值,给出了3行数据(最外层大括号内有3组分段的大括号),而定义的第一维长度是2,所以是不正确的。