C语言基础 数组
一、一维数组的创建和初始化:
1.创建:
2.初始化:
int arr[7]={1,2,3};//不完全初始化
char arr1[] = {'a','b','c'};//不会包含‘\0’
char arr2[] = "abc";//包含‘\0’
printf("%d\n",sizeof(arr2));//输出‘4’
printf("%d\n",strlen(arr2));//输出‘3’...不包含‘\0’
4.sizeof 和 strlen 的区别:
size of 只关注 空间大小…
strlen 会根据 ‘\0 ’ 来计算字符串长度…
5.char arr = {‘a’,‘b’,‘c’} 和 char arr = “abc” 的区别:
printf("%d\n",sizeof(arr1));//输出‘3’
printf("%d\n",sizeof(arr2));//4
printf("%d\n",strlen(arr1));//因为没有‘\0’即输出随机值
printf("%d\n",strlen(arr2));//3
二、一维数组的访问和使用:
1.代码:
char arr2[] = "abc";//[a][b][c][\0]包含‘\0’
printf("%c\n",arr2[1]);
for(i=0;i<strlen(arr2);i++)
{
printf("%c\n",arr2[i]);
}
int arr3[] ={1,2,3,4,5,6,7,8,9,0};
int sz = sizeof(arr3)/sizeof(arr3[0]);
for(i=0;i<sz;i++)
{
printf("%d\n",arr3[i]);
}
总结:
1.数组是使用下标来访问的,下标是从0开始的;
2.数组的大小可以通过计算得到;
int sz = sizeof(arr3)/sizeof(arr3[0]);
三、一维数组的内存存储:
1.代码_打印一维数组中 各个元素的地址:
打印地址 — “%p\n”
int arr3[] ={1,2,3,4,5,6,7,8,9,0};
int sz = sizeof(arr3)/sizeof(arr3[0]);
for(i=0;i<sz;i++)
{
printf("arr[%d]的地址是:%p\n",i,&arr3[i]);//接收地址的是 %p 即指针....
}
2.连续存放 、每个占4个字节:
四、二维数组的创建和初始化:
1.创建(几行几列):
2.初始化:
2.1 初始化的两种方式:
2.2 初始化省略下标:
2.2.1 行列都省略 会报错:
2.2.2 行可以省略 、 列不可以省略:
五、二维数组的基本使用:
int a1[4][5] = {{1,2,3,4},{4,5,6},{1,2}};//定义一个二维数组
int i;
for(i=0;i<4;i++)
{
int j;
for(j=0;j<5;j++)
{
printf("%d ",a1[i][j]);
}
printf("\n");//每一行换行
}
六、二维数组的存储地址(也是连续存储):
int a1[4][5] = {{1,2,3,4},{4,5,6},{1,2}};//定义一个二维数组
int i;
for(i=0;i<4;i++)
{
int j;
for(j=0;j<5;j++)
{
printf("a1[%d][%d]的地址是:%p\n",i,j,&a1[i][j]);
}
printf("\n");//每一行换行
}
七、数组作为函数参数:
数组作为参数传给函数,用 “冒泡法” 进行排序…
总结:
1.数组作为参数传给函数 是传的&arr[0]“元素首地址”…传的地址的话,main和子函数就有联系了…就像传址调用
2.冒泡法…传size大小…
void bubble_sort(int arr1[],int sz1)
{
//确定冒泡排序的趟数...趟数 = 总元素个数-1
int i,j;
int tmp =0;
//所有的定义放在最前面...
for(i= 0;i<sz1-1;i++)
{
for(j=0;j<sz1-1-i;j++)
{
if(arr1[j]>arr1[j+1])
tmp = arr1[j];
arr1[j] = arr1[j+1];
arr1[j+1] = tmp;
}
}
}
int arr[]={10,9,8,7,6,5,4,3,2,1,0};//创建一个数组 用冒泡实现排序
int i;
int sz = sizeof(arr)/sizeof(arr[0]);//计算元素个数
//对arr进行排序,排成升序
bubble_sort(arr,sz);//数组作为函数参量..
//arr传过去的是数组的首地址...即 &arr[0]
for(i=0;i<sz-1;i++)
{
printf("%d ",arr[i]);
}
八、数组的数组名是什么???:
1.数组名是首元素地址…
2.sizeof(数值名):
sizeof(数组名) - 数组名表示整个数组 - sizeof(数组名) 计算的整个数组的大小,单位是字节;
3.&arr:
&数组名中 数组名代表整个数组,&数组代表取整个数组的地址