1.数组长度
#include <stdio.h>
#include <string.h>
int main()
{
char arr4[] = "abcdef";
printf("%d\n",sizeof(arr4));
//sizeof计算arr4所占空间大小
//7个元素——char 7*1 = 7
printf("%d\n",strlen(arr4));
//strlen求字符串长度求得是‘\0’之前的字符个数
//[a b c d e f \0]
//6个字符
return 0;
}
结果
7
6
例
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
printf("%d\n",sizeof(arr1));
//计算变量,数组,类型大小单位是字节-操作符包括\0
printf("%d\n",sizeof(arr2));
printf("%d\n",strlen(arr1));
//求字符串长度,只针对字符串求长度不包括字符串标志符\0,使用得引头文件
printf("%d\n",strlen(arr2));
//arr2没有具体\0的位置输出随机值,strlen在\0之前停,检测不到\o输出随机值
return 0;
}
2.输出二位数组
#include <stdio.h>
int main()
{
int arr[3][4] = {{1,2,3},{4,5}};
int i = 0;
for(i=0;i<3;i++)
{
int j = 0;
for(j = 0;j<4;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
3.输出地址
#include <stdio.h>
int main()
{
int arr[3][4] = {{1,2,3},{4,5}};
int i = 0;
for(i=0;i<3;i++)
{
int j = 0;
for(j = 0;j<4;j++)
{
printf("&arr[%d][%d] = %p\n ",i,j,&arr[i][j]);
}
}
return 0;
}
4.冒泡排序
#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
//确定冒泡排序的趟数
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[] ={9,8,7,6,5,4,3,2,1,0};
int i =0;
int sz = sizeof(arr)/sizeof(arr[0]);
//对arr进行排序,排成升序
//arr是数组,我们对arr数组进行传参,实际上传递过去的是数组arr首元素的地址&arr[0]
bubble_sort(arr,sz);
for(i=0;i<sz;i++)
{
printf("%d",arr[i]);
}
return 0;
}
结果
0123456789
假如一开始给的数据相对有序,为了简化内容可以优化程序
#include <stdio.h>
void bubble_sort(int arr[],int sz)
{
int flag = 1;//假设这一趟y要排序的数据已经有序
//确定冒泡排序的趟数
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;
flag = 0;//本趟排序的数据不完全有序
}
}
if (flag == 1)
{
break;
}
}
}
int main()
{
int arr[] ={9,8,7,6,5,4,3,2,1,0};
int i =0;
int sz = sizeof(arr)/sizeof(arr[0]);
//对arr进行排序,排成升序
//arr是数组,我们对arr数组进行传参,实际上传递过去的是数组arr首元素的地址&arr[0]
bubble_sort(arr,sz);
for(i=0;i<sz;i++)
{
printf("%d",arr[i]);
}
return 0;
}
数组名是数组首元素的地址
#include <stdio.h>
int main()
{
int arr [] ={1,2,3,4,5,6,7};
printf("%p\n",arr);
printf("%p\n",&arr[0]);
printf("%d\n",*arr);//1
return 0;
}
//printf("%p\n",&arr);//取出的是数组的地址
两个例外
1.sizeof(数组名)-数组名表示整个数组 sizeof(数组名)计算的是整个数组的大小,单位是字节
2.&数组名,数组名代表整个数组,&数组名,取出的是整个数组的地址