若排版有错误,请查看PDF版:C语言 - 06 数组、二维数组、字符串.pdf
第十一章 数组
一、 定义
元素类型 数组名[元素个数]
1. 元素个数必须是常量,或者不写
2. 只能在定义数组的同时进行初始化
3. 数组的长度:
sizeof(ages)/sizeof(int)
4. 数组名是数组的地址
int ages[5] = {19,29, 28, 27, 26};
地址:0~4
二、 使用注意
1. 正确写法
int ages[5] = {19,29, 28, 27, 26};
int ages[5] = {10,11};
int ages[5] = {[3] =10, [4] = 11};
int ages[] = {19,29, 28, 27, 26};
int ages['A'-50] = {10,11, 12, 14, 16};
int count = 5;
int ages[count];
ages[0] = 10;
ages[1] = 11;
ages[2] = 18;
2. 错误写法
int ages[];
// 只能在定义数组的同时进行初始化
int ages[5];
ages = {10, 11, 12, 14};
// 如果想再定义数组的同事进行初始化,数组元素个数必须是常量,或者不写
int ages[count] = {10,11, 12};
3. 数组与函数
1) 数组作为函数参数,可以省略元素个数
2) 数组作为函数参数,传递的是整个数组的地址,修改函数形参数组元素的值,会影响到外面的实参数组
void change(int array[])
{
array[0] = 100;
}
int main()
{
int ages[6] = {10,11, 10, 11, 10, 11};
change(ages); // ages[0]==100
return 0;
}
三、 内存分析
1. 存储空间的划分(内存的分配是从高地址到低地址进行的,但一个数组内部元素又是从低到高进行的)
2. 数组名是数组的地址
printf("%p\n", ages);
四、 练习
1. 设计一个函数:int arrayMax(int a[], int count),找出数组元素的最大值
int maxOfArray(int array[],int length)
{
// 数组当做函数参数传递时,会当做指针变量来使用,指针变量在64bit编译器环境下,占据8个字节
// 1.定义一个变量存储最大值(默认就是首元素)
int max = array[0];
// 2.遍历所有元素,找出最大值
for (int i =1; i<length; i++)
{
// 如果当前元素大于max,就用当前元素覆盖max
if (array[i] > max)
{
max = array[i];
}
}
return max;
}
int main()
{
int ages[] = {11,90, 67, 150, 78, 60,70, 89, 100};
int max = maxOfArray(ages,sizeof(ages)/sizeof(int));
printf("%d\n", max);
return 0;
}
第十二章 二维数组
一、 定义
元素类型 数组名[数组的个数][每个数组的元素数]
二维数组是一个特殊的一维数组,它的元素是一维数组。例如int ages[3][3]可以看作由一维数组ages[0]、ages[1]、ages[2]组成,这三个一维数组都包含了3个int类型的元素
int ages[3][3]= {
{10, 11, 90, 89,70},
{10, 11, 90, 89,70},
{10, 11, 90, 89,70}
};
二、 内存分析
第十三章 字符串
一、 什么是字符串
1. 简单的字符串”itcast”
2. 一个’i’是一个字符
3. 很多个字符组合在一起就是字符串
二、 字符串的初始化
// \0的ASCII码值是0
1. 都是字符串,存储时会在后面存入一个’\0’字符,除非标明的字符数与=号后面的字符数相等
char name[8] ="it"; // 不等价:char name[2] ="it";
char name[8] = {'i','t', '\0'};
char name[8] = {'i','t', 0};
char name[8] = {'i','t'};
char name[] = "itcast";
char name2[] = "it\0cast";
2. 不算是一个字符串(只能说是一个字符数组)
char name3[] = {'0','6'};
char name5[] = {'i','t'};
3. 字符串的输出”%s”,’\0’是不会输出的
三、 \0的作用
1. 字符串结束的标记
2. \0的ASCII码值是0
3. printf("%s\n", name2);
会从name2这个地址开始输出字符,直到遇到\0为止
printf("%s\n", &name2[1]);// t
四、 字符串处理函数
1. strlen函数
计算字符串长度,声明在string.h文件中。
1) 计算的是字符数,并不是字数。一个汉字算作3个字符
2) 从某个地址开始数字符的个数,直到遇到\0为止
3) 计算的字符不包括\0
#include <string.h>
char name[] = "itcast"; // 长度:6
char name2[] = "it\0cast"; // 2
char name3[] = {'0','6'}; // 4
五、 字符串数组
char names[2][10]= {"jack","rose"};
printf("%s\n", names[0]);// jack
printf("%c\n", names[0][3]);// e