1 有两种方法
(1)在定义时可以直接赋值来初始化。
(2)在定义后可以为其元素一个个来赋值。
2 示例
#include<stdio.h>。
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<stdio.h>。
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. 分行进行初始化
int a[2][3]={{1,2,3},{4,5,6}};。
2. 不分行的初始化
int a[2][3]={ 1,2,3,4,5,6};。
3. 为部分数组元素初始化
static int a[2][3]={{1,2},{4}};。
4. 可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维的长度可以确定第一维的长度。
int a[ ][3]={ 1,2,3,4,5,6};。
5. 若分行初始化,也可以省略第一维的定义。下列的数组定义中有两对{ },已经表示a数组有两行。
static int a[ ][3]={{1,2},{4}};。
数组的4种声明方式:
1.先声明再初始化
例如:
//1.声明
int[] nums;
//初始化
nums = new int[5];。
2.声明并初始化
例如:
//2.声明、初始化
int[] nums = new int[10];。
3.创建数组同时赋值
例如:
//3.创建数组同时赋值
String[] names=new String[]{"大名","小米","夏雨荷"};。
int[] ages=new int[]{21,22,21,56,13};。
for (int i = 0;i < names.length;i++){。
System.out.prinrln(names[i]);。
for (int i = 0;i < ages.length;i++){。
System.out.prinrln(ages[i]);。
4.创建同时赋值,简写,不能写成两条语句。
例如:
//4.创建同时赋值,简写,不能写成两条语句。
String[] cities = {"上海","北京"};。
扩展资料:
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
(1)iostream后面不加.h,
(2)int n[3][3]=0有误,不能对数组进行这样的初始化,应该是对数组元素逐个赋值。
(3)int (*m)[3]=new int[3][3]; 前面不加int,加上的话,相当于在局部对m重新定义。
初始化方法如下:
(1)int m[3][3];。
for(int i = 0; i < 3; i++)。
for(int j = 0; j < 3; j++)。
m[i][j] = 0;。
(2)int **m = new int*[3]; 。
for(int i = 0; i < 3; i++)。
{
m[i] = new int[3]; 。
for(int j = 0; j < 3; j++)。
m[i][j] = 0;。
}
(3)int *m[3];
int **m = new int*[3]; 。
for(int i = 0; i < 3; i++)。
{
m[i] = new int[3]; 。
for(int j = 0; j < 3; j++)。
m[i][j] = 0;。
}
第二种写法和第三种写法本质上一样的,指向指针的指针其实就是指针的数组。
const int row = 4;。
int ** M2D = new int * [row];。
for(int i = 0; i < row; ++ i)。
M2D[i] = new int [row - i - 1];。
for(int j = 0; j < row - i - 1; ++ j)。
{
M2D[i][j] = i;。
}
上面那个例子,就是申请一个4行的三角矩阵。
原理如下
int ** 作为二维数组的存储地址,也可以视为一维数组的数组,先为这个指针申请行空间(对应为各个数组的数组头),再为各个数组头申请一维数组所需的空间。
二维数组可分为** *[] 和[][],三者的存储方式可以不同,具体的在c++ prime里面有详解。