二维数组,数组作为函数参数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
// //创建
// int arr[3][4];//二维数组,三行四列
// char ch[3][10];
// double arr[2][4];
// //初始化-创建的同时赋值
// int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
// int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
// int arr[3][4] = { 1,2,3,4,5,6,7 };//不完全初始化-整形补0,字符补\0
// int arr[3][4] = { {1,2},{3,4},{4,5} };//不完全初始化
// int arr[][4] = { {1,2},{3,4},{4,5} };//二维数组初始化行可以省略,列不可以省略
// return 0;
//}
//int main()
//{
// int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
// int i = 0;
// int j = 0;
// for (i = 0; i < 3; i++)
// {
// for (j = 0; j < 4; j++)
// {
// printf("%d ", arr[i][j]);
// }
// printf("\n");
// }
// return 0;
//}
二维数组在内存中的存储
//int main()
//{
// int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
// int i = 0;
// int j = 0;
// for (i = 0; i < 3; i++)
// {
// for (j = 0; j < 4; j++)
// {
// printf("&arr[%d][%d]=%p\n",i,j, &arr[i][j]);
// }
//
// // 二维数组在内存中也是连续存放的
// // 一行内部连续,换行也是连续的
// // & arr[0][0] = 004FFC6C
// // & arr[0][1] = 004FFC70
// // & arr[0][2] = 004FFC74
// // & arr[0][3] = 004FFC78
// // & arr[1][0] = 004FFC7C
// // & arr[1][1] = 004FFC80
// // & arr[1][2] = 004FFC84
// // & arr[1][3] = 004FFC88
// // & arr[2][0] = 004FFC8C
// // & arr[2][1] = 004FFC90
// // & arr[2][2] = 004FFC94
// // & arr[2][3] = 004FFC98
//
// }
// return 0;
//}
//为什么二维数组列数不能省略?
//因为内存布局情况,连续存放
//int main()
//{
//
// int arr[][4] = { {1,2},{3,4},{4,5} };
// int i = 0;
// int j = 0;
// int*p=&arr[0][0];
// //指针变量*怕,指针的p是存储的指向的地址,p++就是指向p的下一个地址,带上*是可以操作修改这个地址里面的内容
// for (i = 0; i < 12; i++)
// {
// printf("%d ", *p);
// p++;
// }
// return 0;
//}
//void bubble_sort(int arr[])//形参arr本质上是指针
//{
// //计算数组元素个数
// int sz = sizeof(arr) / sizeof(arr[0]);//err,此时sz=1
// //数组传参的时候,传递的其实只是数组首元素的地址
//
// //确定趟数
// int i = 0;
// for (i = 0; i < sz - 1; i++)
// {
// //一趟冒泡排序的过程
// int j = 0;
// for (j = 0; j < sz-1-i ; j++)
// {
// if (arr[j] > arr[j + 1])
// {
// //交换
// int tmp = arr[j + 1];
// arr[j+1] = arr[j];
// arr[j] =tmp;
//
// }
// }
// }
//}
//
//int main()
//{
// int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
// //排序为升序-冒泡排序
// //冒泡排序的思想
// //两两相邻的元素进行比较,并且可能的话需要交换
// //一趟冒泡排序搞定一个元素
// //n个数字 n-1趟冒泡排序
//
//
// bubble_sort(arr);
//
// return 0;
//}
//void bubble_sort(int arr[], int sz)//形参arr本质上是指针
//{
//
// //确定趟数
// int i = 0;
// for (i = 0; i < sz - 1; i++)
// {
// //一趟冒泡排序的过程
// int j = 0;
// for (j = 0; j < sz - 1 - i; j++)
// {
// if (arr[j] > arr[j + 1])
// {
// //交换
// int tmp = arr[j + 1];
// arr[j + 1] = arr[j];
// arr[j] = tmp;
//
// }
// }
// }
//}
//
//int main()
//{
// int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
// //计算数组元素个数
// int sz = sizeof(arr) / sizeof(arr[0]);
// bubble_sort(arr,sz);
// int k = 0;
// for (k = 0; k < 10; k++)
// printf("%d ", arr[k]);
// return 0;
//}
数组名是什么?
数组名是数组首元素的地址
但是有两个例外
1.sizeof(数组名)-数组名表示整个数组-计算的是整个数组的大小单位是字节
2.&数组名-数组名表示整个数组-取出的是整个数组的地址
//
//int main()
//{
// int arr[10] = { 0 };
//
// int sz = sizeof(arr); //数组名表示整个数组
// printf("%d\n", sz);
//
// printf("%p\n", &arr);//&arr取出的是数组的地址
// printf("%p\n", &arr+1);
//
// printf("%p\n", arr);
// printf("%p\n", arr+1);
// printf("%p\n", &arr[0]);
//
// printf("%p\n", &arr[0]);
// printf("%p\n", arr);//数组名是数组首元素的地址
// return 0;
//}
对于接近有序的数组
优化
//
//void bubble_sort(int arr[], int sz)
//{
// int i = 0;
// for (i = 0; i < sz - 1; i++)
// {
// int j = 0;
// int flag = 1;
//
// for (j = 0; j < sz - 1 - i; j++)
// {
// if (arr[j] > arr[j + 1])
// {
// int tmp = arr[j + 1];
// arr[j + 1] = arr[j];
// arr[j] = tmp;
// flag = 0;
// }
// }
// if (flag == 1)
// {
// break;
// }
// }
//}
//int main()
//{
// int arr[] = { 1,2,3,4,5,6,7,8,9 };
// int sz = sizeof(arr) / sizeof(arr[0]);
// bubble_sort(arr, sz);
// return 0;
//}
数组作为函数传参的时候
形参可以写成2种形式
1.数组形式
2.指针形式
//
//int arr[10];
//
//test1(arr);
//
//形参数组形式
void test1( int arr[10])
{}
void test1(int arr[])
{}
//
形参是指针的形式
//void test1(int *arr)
//{}
//char ch[3][5];
//test2(ch);//调用
//
//形参是数组
void test2(char arr[2][5])
{}
void test2(char arr[][5])
{}
//
形参也可以是指针
暂时不考虑
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了