文章目录
一、一维数组
1、定义
【存储类型】 数据类型 标识符
例子:
int i;
int arr[i];
int arr[12];
数组可以是变常数组或者非变常数组
2、初始化
1)可以不进行初始化 如:int arr[10];
2)也可进行全部初始化 如: int arr[2] = {1,2};
3)或者部分初始化:int arr[3] = {1};
初始化的时候,把数组放置到静态区static中,所有元素都是0。
3、元素引用
单凭数组来引用
引用格式:数组名 + 下标; 如arr[1] – > 表示访问数组第一个元素。
4、注意点
(1)数组名是常量,不可以放在等号左边
(2)注意数组越界问题。
5、一维数组练习题
二、二维数组
1、定义、初始化
表格有横列纵列,有行列区分
定义时:
[存储类型] + [数据类型] + [标识符][行下标][列下标]
#define M 2
#define N 3
int a[M][N] // 两行三列的矩阵
// 部分初始化
int a[M][N] = {
{
1, 2, 3}};
int a[M][N] = {
{
1, 3}, {
4}};
int a[M][N] = {
1, 3, 4, 5, 7};
2、元素引用
数组名 [行标] [列标]
3、存储格式
二维数组中,行可以被省略,但是列号不可以被省略
因为在二维数组中,数据顺序存储,并按行存储。
a[][3] = {
{
}, {
}};
a[][2] = {
1, 2, 3, 4} // 两行两列
在内存中,先存放行,再存放列。以行为单位。
4、对二维数组的深入理解
(1)数组名是表示地址的常量
(2)int a[2][3] 可以被看做是a[2],里边都是一维数组,a[0]和a[1]都是由三个整形元素组成。a[0] --> a[0][1] a[0][1] a[0][2] a[1] --> a[1][1] a[1][1] a[1][2]
(3)二维数组中a + 1,是跳转了一个一维数组(一行)
a[2]被看做是数组有两个元素,每个元素存放了3个整型数。
(4)数组名是表示地址的常量,不可以放在等号左边*(*(a+1) + 1) = a[1][1] // 第一行一列的元素 *(a+1) = a[1] // 第一行的全部元素
5、例子
(1)行列互换
(2)求二维数组中最大值及其所在位置
(3)求二维数组中各行和各列的和
(4)矩阵乘积
三、字符数组
使用方法与一维和二维数组大致一致。
1、定义、初始化和存储特点
[存储类型] [数据类型] [标识符] [下标]
(1)单个字符初始化 , 如:char str[N] = { 'a', 'b', 'c'};
(2)用字符串常量初始化
char str[N] = "hello, world!";
(3)字符数组与一维数组的主要区别是,其末尾还有一个’\0’。
如"hello" --> ‘h’ ‘e’ ‘l’ ‘l’ ‘o’ ‘\0’
2、输入输出
char str[32];
scanf("%s", str);
输入hello,输出hello。输入hello world,输出也是hello,因为被空格隔断了。
3、常用函数
(1)strlen & sizeof
char str[32] = "hello\0abc"; len_str = strlen(str); len_size = sizeof(str);
得到的len_str是9, len_size是32。因为strlen是以\0为结束标记,sizeof标志字符串在内存中真正占用的长度大小。
(2)strcpy & strncpy
用于给字符串赋值,因为数组名是常量,不可以直接赋值。strcpy(dst, "abcde"); // 以\n为隔断 strncpy(dst, src, size_t n) strncpy(str, "abcde", STRSIZE);
(3)strcat & strncat
用于将两个字符串拼接为一个字符串。str = "hello"; strcat(str, "world");
strcat 会把str后的\0拿掉,放入"world",并添上新的\0,此过程必须保证str足够大,大到可以容纳str + "world"个字符
(4)strcmp & strncmp
strcmp用于比较字符串。strcmp("hello", "world") < 0 strcmp("hello", "apple") > 0 strcmp("hello", "hello" ) == 0 strcmp("hello", "helloa") < 0 strncmp("hello", "helloapple", 5) == 0
4、例子
(1)单词计数:如hello是一个词,hello world tree是三个词
(2)不使用库函数,实现strlen、strcpy、strcat、strcmp。
四、多维数组
int [1][2][3][4][5][6][7][8][9][10][11]
总结
1、一维数组 (概念)(注意点)(例子)
2、二维数组 (概念)(注意点)(例子)
3、字符数组 (概念)(注意点)(例子)
学习道阻且长,必能苦尽甘来,加油!!!