目录
[1]计算字符串实际元素个数
char a[33]="hello";
for (; a[i] !='\0'; i++)
strlen
size_t strlen(const char *s);
功能:计算字符串实际元素个数,不包括'\0'
参数:字符数组的首地址 返回值:字符串实际字符个数
int b=strlen(a); 或 printf("%ld\n",strlen(a));
printf("%d\n",b);
sizeof和strlen的却别
1、sizeof是关键字,strlen是函数
2、sizeof是计算元素实际开辟的空间大小,strlen计算字符串实际元素个数
sizeof计算包括'\0',strlen不包括'\0'
3、char a[]=”hello“,sizeof(a)==6 strlen(a)==5
[2]冒泡排序
int a[5]={6,5,4,3,2}; //从小大排,确保右边是最大的
int b=0;
for (int i = 0; i < 4; i++) // 轮数 五个数比较四轮
{
for (int j = 0; j < 4-i; j++) //每一轮比较的次数
{
if (a[j]>a[j+1]) //确定了最大值,或最小值,固定在最右边
{ //之后不参与比较,所以随着循环的执行
b=a[j]; //参与比较的元素越来越少,索引越带越低
a[j]=a[j+1];
a[j+1]=b;
}
}
}
for (int i = 0; i < 5; i++)
{
printf("%d\n",a[i]);
}
[3]选择排序
假设第一个元素,和后边每一个进行比较,比较过成中遇到更小值,暂存下标位置,知道一轮比较结束,再把最小值和最左边的
int a[5] = {3, 7, 5, 9, 4};
int b = 0, m=0;
for (int i = 0; i < 4; i++) //i的值分别取0,1,2,3执行四次循环
{
m = i; //m:每次循环结束之后从新赋值,暂存下标
for (int j = i + 1; j < 5; j++)//j=i+1 每次在小循环从交换结束的下一位开始
{ //j<5 五位数循环比较的次数小于5
if (a[m] > a[j])
m = j;
}
if (m != i)
{
b = a[m];
a[m] = a[i];
a[i] = b;
}
}
for (int i = 0; i < 5; i++)
{
printf("%d ", a[i]);
}
[4]二维数组
格式:数据类型 数组名[行数][列数]
int a[2][3]={2,3,4,5};
访问:数组名[行下标][列下标] 下标从0开始
a[0][0] | a[0][1] | a[0][2] |
a[1][0] | a[1][1] | a[1][2] |
int a[2][3]={2,3,4,5};
定义二维数组时:可以省略行数,但是不能省略列数。
int a[2][]={2,3,4,5,6,7}; //错误,无法确定具体两行几列
int a[][3]={2,3,4,5,6,7};
数组名
是第一行的首地址
int a[2][3]={2,3,4,5};
printf("%p %p\n",a,&a[0][0]); //0x7ffd6f307fa0 0x7ffd6f307fa0
printf("%p %p\n",a+1,&a[0][0]); //0x7ffd6f307fac 0x7ffd6f307fa0
数组元素个数:行数*列数
数组大小:行数*列数*数据类型大小
sizeof(数组名) printf("%d\n",sizeof(a));
初始化:
完全初始化:int a[2][3]={2,3,4,5};
int arr[2][3]={{1,1,2},{2,3,3}};//按行初始化
部分初始化:int a[2][3]={2,3};
int arr[2][3]={{1,1},{2}}; 1 1 0 2 0 0
未初始化:只为随机值 需要单独进行赋值
内存分配
a[0]:是第一行第一列的地址
a[0]+1:是第一行第二列的地址
a:第一行开头的地址
a+1:第二行开头的地址
地址 | 元素 | |||
a[0] | &a[0][0] | a | 2 | a[0][0] |
a[0]+1 | &a[0][1] | 3 | a[0][1] | |
a[0]+2 | &a[0][2] | 4 | a[0][2] | |
a[1] | &a[1][0] | a+1 | 5 | a[1][0] |
a[1]+1 | &a[1][1] | 6 | a[1][1] | |
a[1]+2 | &a[1][2] | 7 | a[1][2] |
遍历二维数组
(用循环的方式将数组中的所有数据进行浏览)
int a[2][3]={};
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
scanf("%d",&a[i][j]);
}
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
printf("%d\n",a[i][j]);
}