C++数组(二维数组)

二维数组的定义

a[][3]这里的3表示总共有3列,但是取值二维数组的最后一个元素是a[2][2]

 

 

二维数组的取值

①数组定义时可以不初始化。


char arr[5]; 5个字符对应的ASCII码组成的数组// 定义了一个长度为 5 的 char 型数组,不指定初始值

在计算机中所有数据必须以数字形式表示,每个字符用一个数字表示(数字即字符对应的ASCII码),数字在0-127之间,故选用char型表示

char ch=65;//ch表示大写字母‘A’
char ch1=49;//ch1表示数字‘1’

 虽然数组可能全部都是数字,但是类型为char时则表示为数字对应的ASCII码

 

注意:

int arr[5];
数组未初始化,所以每个元素的值都是乱七八糟的值(随机值),arr[0]+arr[1]的值随机


②初试化可赋值为全0

char arr[5] = { 0 };则所有元素的值都是 0

 

arr[0] 的值是22, 后面的元素的值都是0

③元素的下标从 0 开始计算(数组打印不像Python中直接通过打印数组名实现)

错误,不用用此方法,如果要打印数组一定是用for循环来打印

④用 sizeof 取得数组的大小


数组的大小由元素的类型和元素的个数共同决定。
int arr[100];
int size = sizeof(arr); // 大小为 100*4

 

数组作为形参(加*)

数组作为形参传入时,传入的是数组的首地址

int* arr,表示一个int数组的首地址,然后只需要for循环处理数组中的元素即可,不用多考虑*

int find_min(int* arr, int size)
{
	int min = arr[0];
	for (int i = 1; i < size; i++)
	{
		if (arr[i] < min)
		{
			min = arr[i];
		}
	}
	return min;
}

二维数组

1、定义:

int array[4][4];
array[2][3] = 128; // 对坐标(3,4)位置进行赋值

下标依然是从0开始

2、二维数组的初始化

使用多个大括号,一行行初始化

①二维数组的取值

只取出一维的理解

 从调试过程可以看出只有每行的第一个元素是有值的,这很像一维数组中只定义一个元素的情况

 

②数组指定行元素清零(memset函数实现)

自己思路:用嵌套for循环实现清零

方法2:内存重置函数memset函数

#include <stdio.h>
#include <string.h>

int main()
{
	int  arr[3][10];

	// 第2行的首地址
	// 第2行的大小(按字节计算)
	memset(&arr[1][0], 0, 10*4);

	return 0;
}

③指定两行数据的交换(使用memcpy函数:目的内存,地址,字节)

	int  arr[3][5] =
	{
		{ 1, 1, 1, 3, 3},
		{ 2, 2, 12, 13, 14},
		{ 5, 6, 7, 0, 1}
	};
	printf("%d\n", arr[1][0]);//打印一行用什么格式?不能直接打印arr[1]


	char* buf = (char*)malloc(5 * 4);//定义一个新的内存,指定字节数
	memcpy(buf,&arr[1][0],20);//第二行的首地址,赋值给buf
	memcpy(&arr[1][0], &arr[2][0], 20);
	memcpy(&arr[2][0], buf, 20);

	printf("%d\n", arr[1][0]);

	free(buf);

定义了memcpy函数就要使用头文件stdlib.h

取二维数组的方法:直接取出每一行第一个元素的首地址,通过memcpy函数实现整行的赋值(通过for循环取出一行,格式%d)

申请了内存使用了malloc函数,先将free函数在后面写出,避免遗忘(养成好的习惯)

 

编程:

自己思路:

	int arr[11] = { 12, 8, 99, 28, 19, 23, 98, 12, 34, 48, 98 };
	int count = 0;
	for (int i = 0;i <= 10;i++)
	{
		printf("%2d",arr[i]);
		count++;
		if (count == 4)
		{
			printf("\n");
			count = 0;	//清零容易漏掉
		}

		else
			printf(" ");
	}

这里不需要定义count变量,每到四个数就打印换行,否则打印数组元素+空格

另外注意要求的输出格式,右对齐使用%2d

	int arr[11] = { 12, 8, 99, 28, 19, 23, 98, 12, 34, 48, 98 };
	for (int i = 0; i < 11; i++)
	{
		if (i % 4 == 0&&i>0)//i>0的目的避免第一行就打印出一个空格
		{
			printf("\n"); // 每4个数一行
		}

		printf("%2d ", arr[i]);
	}

利用for循环中的i计数,能整除4就打印换行,否则打印数组元素+空格

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值