day16
谁能横刀立马,唯我飞牛大将军!
下面是打印day17所学到的知识:
涵盖知识点:
二维数组的创建与初始化
二维数组的使用
二维数组在内存中的存储
数组作为函数参数
数组
二维数组
1. 二维数组的创建与初始化
//二维数组的创建
int arr[1][2];
char arr[6][8];
double arr[2][3];
<1>一定要这样认识:二维数组本质可以当做一维数组,只不过该一维数组内放的元素是一维数组。
<2>可以画成矩阵,但是不能这样理解二维数组!
<3>任何数组,都是线性、递增且连续。
//二维数组的初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{3,4}};
int arr[][4] = {{2,3},{4,5}};
# 行可不写,列一定要写。
//二维数组的错误创建
int arr[2][] = {2,4};
int arr[2][3] = {{1},{},{3,4}};
2. 二维数组的使用
二维数组的使用也是用下标的方式
#include<stdio.h>
#include<windows.h>
#define ROW 3
#define COL 4
int main()
{
int i = 0;
for (; i <= ROW;i++)
{
int j = 0;
for (; j <= COL; j++)
{
printf("%d ",arr[i][j]);
}
}
system("pause");
return 0;
}
3. 二维数组在内存中的存储
#include<stdio.h>
#include<windows.h>
#define ROW 3
#define COL 4
int main()
{
int arr[ROW][COL];
int i = 0;
for (; i <= ROW;i++)
{
int j = 0;
for (; j <= COL; j++)
{
printf("arr[%d][%d] = %p\n",i,j,&arr[i][j]);
}
}
system("pause");
return 0;
}
结论:二维数组在内存中也是连续存放的,并且是由低地址到高地址
4. 数组作为函数参数
## 冒泡排序 ,正确设计 ##
#include<stdio.h>
#include<windows.h>
void bubble_sort(int arr[],int num)
{
int i = 0;//代表冒泡了几轮
for (; i < num - 1; i++)
{
int j = 0;//代表每轮冒泡了几次
for (; j < num - 1 - i; j++)
{
if (arr[j]>arr[j + 1])
{
int temp = 0;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[] = { 2, 5, 9, 8, 6, 4, 7, 3 };
int num = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, num);
int a = 0;
for (; a < num;a++)
{
printf("%d ",arr[a]);
}
system("pause");
return 0;
}
## 冒泡排序,错误设计 ##
#include<stdio.h>
#include<windows.h>
void bubble_sort(int arr[],int num)
{
int num = sizeof(arr) / sizeof(arr[0]);
int i = 0;//代表冒泡了几轮
for (; i < num - 1; i++)
{
int j = 0;//代表每轮冒泡了几次
for (; j < num - 1 - i; j++)
{
if (arr[j]>arr[j + 1])
{
int temp = 0;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[] = { 2, 5, 9, 8, 6, 4, 7, 3 };
bubble_sort(arr, num);
int a = 0;
for (; a < num;a++)
{
printf("%d ",arr[a]);
}
system("pause");
return 0;
}
这里将 int num = sizeof(arr) / sizeof(arr[0]); 拿到void bubble_sort 函数中,这里void bubble_sort函数的内部的 num 是1。
答案:数组作为函数参数时,不是把整个数组传过去,而是把数组的首地址,数组地址传过去,这里细节,数组作函数参数,降维成指针!。
那么数组名是什么?
int main()
{
int arr[10] = {1,2,3,4,5};
printf("%p\n",arr);
printf("%p\n", &arr[0]);
printf("%p\n", *arr);
printf("%p\n", arr+1);
printf("%p\n", &arr+1);
}
结论:数组名是数组首元素的地址。(两个例外)
两个例外:&arr # sizeof(arr)这里的arr指的是整个数组。