C语言学习记录(八)——二维数组

二维数组的创建和初始化

二维数组的创建

//数组创建
int arr[3][4];
char arr[3][5];
double arr[2][4];

二维数组的初始化

//数组初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}};  //局部已初始化,剩下部分将自动填充0
int arr[][4]  = {{2,3}}       //在定义二维数组时,可以省略行,不能省略列
二维数组是特殊的一维数组

二维数组的使用

  对二维数组进行赋值的方法。

#include<stdio.h>
int main(){
	int arr[3][4] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++){
		int j = 0;
		for (j = 0; j < 4; j++){
			arr[i][j] = i * 4 + j;
		}
	}
	for (i = 0; i < 3; i++){
		int j = 0;
		for (j = 0; j < 4; j++){
			printf("%d\n", arr[i][j]);
		}
	}
	return 0;
}

  打印出二维数组的每个元素的位置地址

#include<stdio.h>
int main(){
	int arr[3][4];
	int i = 0;
	for (i = 0; i < 3; i++){
		int j = 0;
		for (j = 0; j < 4; j++){
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}
	return 0;
}

数组作为函数参数

数组名在两种情况下会代表整个数组:
  ①sizeof(数组名),计算整个数组的大小,sizeof内部单独放一个数组名,数组名表示整个数组。
  ②&数组名,取出的是数组的地址。&数组名,数组名表示整个数组。
以冒泡排序为例:


#include<stdio.h>
void bubble_sort(int arr[], int size){
       //i代表趟数
	for (int i = 0; i < size - 1; i++){
		for (int j = 0; j < size - 1 - i; j++){
			if (arr[j]>arr[j + 1]){
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}
void ShowArr(int arr[],int size){
	for (int i = 0; i < size; i++){
		printf("%d", arr[i]);
	}
	printf("\n");
}
int main(){
	int arr[] = { 3, 1, 7, 5, 8, 9, 0, 2, 4, 6 };
	int size = sizeof(arr) / sizeof(arr[0]);
	ShowArr(arr, size);
	bubble_sort(arr, size);
	ShowArr(arr, size);
	return 0;
}

练习1:下面代码的运行结果:

#include<stdio.h>
int main(){
    int arr[] = {1,2,(3,4),5};
    printf("%d\n", sizeof(arr));
    return 0;
}

  对于arr数组里面共有4个元素,其中(3,4)为逗号表达式,取后者,因此数组中的元素分别为1,2,4,5,而sizeof(arr)求的是整个数组所占空间的大小即4*sizeof(int) = 4*4 = 16

补充:数组的下标由小到大,地址由低到高这点是随系统决定的,一般而言是这样。

练习2:创建一个整型数组,完成对数组的操作
  ①实现init()初始化数组全为0
  ②实现printf()打印数组的每个元素
  ③实现reverse()函数完成数组元素的逆置

#include<stdio.h>
void Init(int arr[],int size){
	int i = 0;
	for (i = 0; i < size; i++){
		arr[i] = 0;
	}
}
void Print(int arr[], int size){
	for (int i = 0; i < size; i++){
		printf("%d\n", arr[i]);
	}
	printf("\n");
}
void Reverse(int arr[], int size){
	int left  = 0;
	int right = size - 1;
	while (left < right)
	{
		int tmp = arr[left];
		arr[left] = arr[right];
		arr[right] = tmp;
		left++;
		right--;
	}
}
int main(){
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int size = sizeof(arr) / sizeof(arr[0]);
	//Init(arr, size);
	Print(arr, size);
	Reverse(arr, size);
}

练习3:交换数组,将数组A中的内容与数组B中的内容进行交换

#include<stdio.h>
int main(){
    int arr1[10] = {1,2,3,4,5,6,7,8,9,10};
    int arr2[10] = {11,12,13,14,15,16,17,18,19,20};
    for (int i = 0;i < 10; i++){
        int tmp = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = tmp;
    }
    return 0;
}
#include <stdio.h>
 
 
int main()
{
	int arr1[10] = {0};
	int arr2[10] = {0};
	int i = 0;
	printf("请输入10个数字:>");
	for(i=0; i<10; i++)
	{
		scanf("%d", &arr1[i]);
	}
	printf("请输入10个数字:>");
	for(i=0; i<10; i++)
	{
		scanf("%d", &arr2[i]);
	}
	//交换
	for(i=0; i<10; i++)
	{
		int tmp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
	}
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值