文章目录
字符数组
字符数组的输入输出
输入
char str[32] = {};
1.scanf(“%c”, &str[i])
scanf(“%s”, str);
输入的字符串不能含有空格,因为 scanf 输入字符串遇到空格或 \n 都会认为字符串输入 结束,空格后面的内容就不再存放到数组当中
如果需要输入空格可以使用下面的格式:
scanf(“%[^\n]”, str);
2.gets
char *gets(char *s);
功能:从终端获取字符串
参数:s:目标字符数组的首地址
返回值:目标字符数组的首地址
输出
1.printf(“%s\n”, str);
2.for(int i = 0; i < 32; i++)
{
printf(“%c”, str[i]);
}
printf(“\n”);
3.puts
int puts(const char *s)
功能:向终端输出字符串
参数:s:要输出字符数组的首地址
返回值:输出字符的个数
计算字符串的实际长度
1.for循环遍历数组,直到 /0 为止
for(n = 0; buf[n] != ‘\0’, n++);
2.strlen
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串的实际长度(不包括 \0)
参数:s:要计算的字符串的首地址
返回值:字符串的实际长度
sizeof 和 strlen 的区别
1.sizeof是关键字,strlen是函数
2.sizeof 是计算数据所占空间大小,strlen 计算字符串的实际长度
3.sizeof 计算包括 \0,strlen计算不包括 /0,计算字符串长度时(元素个数省略情况下),sizeof比strlen 大1
冒泡排序
选择排序:
二维数组
1.格式:
存储类型 数据类型 数组名[行数][列数]
int arr[2][3];
2.访问元素
数组名[行下标][列下标]; (下标从0开始)
arr[0][0]:第一行第一列的元素
arr[1][2]:第二行第三列的元素
行下标、列下标都不能越界
行数可以省略,但是列数不能省略
int arr[][3];
3.数组元素个数:
行数 * 列数
sizeof(数组名) / sizeof(数据类型)
4.二维数组的大小:
sizeof(数组名)
数据类型大小* 元素个数
5.数组名
arr:第一行的首地址
arr+1:第二行的首地址
6.初始化
1)全部初始化:
int arr[2][3] = {1, 2, 3, 4, 5, 6};
printf(“%d %d %d\n”, arr[0][0], arr[0][1], arr[0][2]); // 1 2 3
printf(“%d %d %d\n”, arr[1][0], arr[1][1], arr[1][2]); // 4 5 6
2)部分初始化:未初始化的部分元素值为0
int arr[2][3] = {1, 2, 3, 4}; // 顺序赋值
printf(“%d %d %d\n”, arr[0][0], arr[0][1], arr[0][2]); // 1 2 3
printf(“%d %d %d\n”, arr[1][0], arr[1][1], arr[1][2]); // 4 0 0
int arr[2][3] = {{1, 2}, {4, 5}}; // 按行赋值 1 2 0 4 5 0
3)未初始化:随机值,需要单独的赋值
int arr[2][3];
内存分配
// a 和 a[0] 并不完全相同,级别不同,后面会讲,数值上是一样的,级别不一样
// a 是行地址
// a[0] 是列地址
// a 表示 第一行的首地址
// a+1 表示 第二行的首地址
// a[0] 表示第一行第一列的地址
// a[1] 表示第二行第一列的地址