数组 与 字符数组
构造数据类型: 有程序员设计的数据类型 基于基本数据类型的组合
数组: 将多个 相同类型的 数据 连续,有序存放 构成的数据类型 称数组
数组的元素: 即 数组中的每一个数据
数组定义:
存储类型 元素数据类型 数组名[元素个数];
示例: 存储5个整型 元素的数组
int arr[5];
数组的初始化: 定义数组时给定 初始值
int arr[5] = {初始化表};
int arr[5] = {1,2,3,4,5};
int arr[5] = {1,0,2}; //初始化表 没有包含全部元素, 剩余元素默认赋值为0
int arr[] = {1,2,3,4}; //定义数组时, 没有给定元素个数,但有初始化表
//则 数组的个数将由 初始化表中元素个数决定
int arr[]; // 不能这样定义 , 编译器无法确定你元素的个数
int arr[5] = {0}; //将数组元素全部初始化为0
int arr[5];
数组定义时 元素个数 必须预先已知和确定
即 定义数组时 其元素个数不能是变量
即 程序运行起来前, 数组元素个数应该已经确定
数组的使用:
元素访问: 读 写 数组中的元素
使用 [] 元素访问运算符
示例:
数组名[元素下标];
元素下标: 数组中的元素 从0开始 自左向右依次编号
//元素下标 可以是整型表达式
数组的遍历: 即 将数组中的 每个元素都访问一次
for(int i=0;i < sizeof(arr)/sizeof(arr[0]) ; i++)
for(int i = sizeof(arr)/sizeof(arr[0]) -1; i >= 0; i--)
除初始化外, 数组不能 通过元素列表方式赋值
arr = {1,2,3,4,5}; // 不行 C语言 不支持
数组名:
1. 代指这个数组本身 数组名[下标]; sizeof(arr);
2. 代指这片内存空间的 首地址 printf("%p",arr); //arr == &arr[0]
数组的内存模型:
数组占用空间 为 元素个数 * 每个元素的长度
&arr[0]; 该表达式 表示 取 数组arr中 0号元素的 地址
示例:
斐波那契数列 数组方式求解
n = 25
int arr[26] = {0,1,1}; arr[25]; // 数组下标 就是 第n项的值
arr[1];
练习:
有数组int arr[10] = {6,3,5,2,4,20,7,1,23,11};
1. 找到 数组中 最大元素的 值 和其 下标
作业:
数组 {11,23,1,7,20,4,2,5,3,6}
数组排序 ==> 升序
字符串: 本质也是一个数组 char 类型的数组
char buf[20];
fgtes(buf, sizeof(buf), stdin);
"hello" 常量 常量区
//定义一个字符数组 初始化为 hello
char buf[20] = "hello";
buf = "world"; // 不能 数组不能一次赋值多个元素
常量字符 "hello"
代指 1. 这个字符串本身 char buf[20] = "hello";
2. 代指 常量字符串 在常量区的地址
字符串的长度??
从字符串开始 到结束'\0' 值 0 中间有多少个字符
练习:
1.输入一个字符串, 统计其中 大写字符的个数
2.字符串拷贝 输入一个字符串到 buf中 拷贝buf中的字符
到 char arr[20];数组中 去除'\n'
字符串拷贝函数 #include <string.h>
char *strcpy(char *dest, const char *src);
将字符串 src 拷贝一份到 dest 空间中
char *strncpy(char *dest, const char *src, size_t n);
将字符串 src 拷贝一份到 dest 空间中 n 表示需要拷贝的字符个数
3.写一个程序 判断输入的 密码 是否正确 假设正确密码为 "123456"
#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
比较两个字符串 s1 和 s2 相等 返回 0 != 0 不相等
作业:
1. 输入一个字符串buf 删除其中的所有数字字符 在buf中
二维数组: 即 数组中的元素 是一个数组(一维数组)
成绩表 语文0 数学1 外语2
0 张三 88 79 99 一维数组 {88,79,99} int arr[3];
1 李四 78 100 60 一维数组 {78,100,60} int arr[3];
{88,78} {79,100} {99,60}
int arr3[3][2] = {{88,78} {79,100} {99,60}};
张三的语文成绩 arr3[0][0]
张三的数学成绩 arr3[1][0]
成绩表: 将多个 相同类型的 数据 连续,有序存放 构成的数据类型 称数组
二维数组: 定义
int arr2[2][3];
初始化:
int arr2[2][3] = {{88,79,99},{78,100,60}};
int arr[3] = {88,79,99}; arr[0]
访问:
张三的语文成绩 arr2[0][0]
arr2[0] 是一个一维数组 属于二维数组的0号元素
张三的数学成绩 arr2[0][1]