前言:大家好,这里是YY;此篇博客主要是数组的知识点;包含【一维数组】【二维数组】【二维数组的使用】【数组名的要点】【打印数组的两种方式】【数组的传参要点】【数组实际应用:三子棋索引】
PS:创作不易,每个知识点都有例题或者图帮助理解;如果对你有帮助,希望能够得到您的关注,赞,收藏,谢谢!

例:
int n=0;
scanf("%d",&n);
int arr[n];支持C99标准的编译器环境下能编译int arr1[2]={1,1};完全初始化
int arr2[10]={1}不完全初始化,第一个元素初始化为1,其余剩下都为0例:

区别:

例:



图示:



int arr[3][4]={{1,2},{4,5}};
int arr[][4]={{1,2},{4,5}};
图示:



PS:引申用法:当把每行当作一维数组时,数组名可视作行名

图示:


除此之外,遇到的数组名都是数组首元素的地址
PS:arr[n]表示第n+1个数组元素
代码演示:
int arr[10]={0};
printf("%p\n",arr);首元素的地址
printf("%p\n",arr+1);首元素的地址+1
printf("%p\n",&arr[0]);首元素的地址
printf("%p\n",&arr[0]+1);首元素的地址+1
printf("%p\n",&arr);数组的地址
printf("%p\n",&arr+1);数组结尾下一个的地址int arr[10]={1,2,3,4,5,6,7,8,9,10};
int*p=&arr[0]; p为首元素地址
int*p=arr;for(int i=0;i<10;i++)
{
printf("%d",arr[i]);
}//int*p=&arr[0]; p为首元素地址
for(int i=0;i<10;i++)
{
printf("%d",*(p+i));
printf("%d",*(arr+i));
}原理图示:

int arr[10]={1,2,3,4,5,6,7,8,9,10};
for(int i=0;i<10;i++)
{
printf("%d",arr[i]); arr[i]--->*(arr+i)---->*(i+arr)
printf("%d",i[arr])
}二者等效:
void bubble_sort(int* arr);
void bubble_sort(int arr[10]);void bubble_sort(int arr[10])
{
//求数组的元素个数
int sz=sizeof(arr)/sizeof(arr[0]); 问题点:此时的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];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
int main()
{
int arr[]={3,1,7,5,8,9,0,2,4,6};
bubble_sort(arr);
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
printf("%d",arr[i]);
}
return 0;
}void bubble_sort(int arr[10])
{
//冒泡排序的趟数
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];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}
int main()
{
int arr[]={3,1,7,5,8,9,0,2,4,6};
bubble_sort(arr);
//求数组的元素个数
int sz=sizeof(arr)/sizeof(arr[0]); 改变点:此时arr为数组
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
{
printf("%d",arr[i]);
}
return 0;
}后续更新