一、一维数组的创建和初始化
什么是数组:一组相同类型元素的集合。
一维数组的创建:
int arr[];
char s[];
double arr1[];
变长数组:数组中存储的元素是变量。
int n=0;
scanf("%d",&n);
int arr[n];
变长数组在C99之前是比支持的,在C99标准后可以使用。
初始化
1.完全初始化:把数组中的每一个元素都赋值
int arr[10]={1,2,3,4,5,6,7,8,9,10};
2.不完全初始化:赋值一部分元素,其他元素默认为0。
int arr[10]={1,2,3,4,5};
二维数组
二维数组的创建方式
int arr[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
char arr[3][4]==['0','1,'2','3','4','5','6','7','8','9','10','11'}
//arr[0],arr[1],arr[2]
//可以理解为行数组的数组名
注意:二维数组不可以省略列数。必须要指定列数。
数组作为参数传递
1.冒泡排序
数组传参传的是首元素的地址。
错误写法:
因为数组传的是首元素地址,所以在计算sz时,其实是sizeof(地址)/sizeof(第一个元素的大小)=1.
正确写法
void bubble(int*arr)
{
int i=0;
for(i=0;i<sz-1;i++)
{
for(int 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[10]={0};
int i=0;
for(i=0;i<10;i++)
{
scanf("%d",&arr[i]);
}
int sz=sizeof(arr)/sizeof(arr[0]);
bubble(arr);
for(i=0;i<10;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
什么是数组名:
//数组名是什么:
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%p\n",arr);
printf("%p\n",&arr[0]);
//两种特殊的情况
//情况一
printf("%d\n",sizeof(arr));//这里的arr是整个数组的名字;
//情况二
printf("%p\n",&arr);
//&arr,这里的arr表示整个数组名,这里取出的是整个数组的地址。
printf("%p",arr+1);//跳过数组的一个元素
printf("%p",&arr+1);//跳过整个数组
printf("%p",&arr[0]+1)//跳过数组的一个元素
}
版权声明:本文为qq_53893431原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。