一、数组的概念及定义
1、概念:用来存放一组类型相同的数组
特点:
只能存放一组数据,比如int类型的数组或者float类型的数组
数组里面的数据称为“元素”
2、数组的定义
类型 数组名[元素个数];
int a[10];
初始化与常见错误:
// 正确
int a[3]={3,5,8};
int a[3]={2,9};
int a[]={1,3,5,6,7,8};
int a[5]={a[0]=1,a[3]=5}; // 指定元素初始化,其他元素默认为0
// 错误
int a[];
int[4] a;
int a[b];
a={3,6,7};
a[4]={1,5,6,8,2};
3、内存分析
数组的内存寻址与基本数据类型一样,由大及小,优先分配大的地址给先来的变量,但是数组元素在内存中的存储地址是由小及大的,按照元素的顺序来,元素值的存储又是由大及小的。
例如
char cs[5] = {'a', 'A', 'D', 'e', 'f'};
该数组内存地址分配原理如下
二、二维数组
1、二维数组是一个特殊的一维数组:它的元素是一维数组。
例如 int a[2][3]可以看作由一维数组a[0]和一维数组a[1]组成,这两个一维数组都包含了3个int类型的元素
2、初始化
int a[3][4] = {1,2,3,4,5};
int a[3][4] = {{},{},{}};
数组元素简单访问
int a[][5] = {3,5,17,26,8};
三、字符串
1、字符串的初始化
char s[] = "123";
其中"123"是由'1'、'2'、'3'、'\0'组成
字符串的输出"%s",'\0'不会被输出
2、\0 的作用
作为字符串结束的标志,例如
int mian()
{
char name[8] ="itcast";
char name2[] = {'i','t'};
printf("%s",name2);
printf("%s",&name2[1]);
}
输出结果为 itcast 与 titcast,因为name2没有\0结尾,结合内存存址分析可知,printf会从name[1]也就是't'字符的地址开始访问,知道遇到 \0停止输出。
3、字符串变量与字符串常量
字符串常量存储在常量区,下图name2跟name3地址相同,都指向唯一"it"
字符串变量属于数组,都存放在内存的栈内存中,可以改动。
小结:
定义字符串的2种方式:
1>利用数组 char name[] = "it";
特点:字符串里面的字符是可以修改的。
使用场合:字符串的内容需要经常修改。
2>利用指针 char *name = "it";
特点:字符串的其实是一个字符串常量,里面的字符是不能修改的。
使用场合:字符串的内容不需要修改,而且这个字符串需要经常使用
保存字符串有2种方式,一时利用数组,另一种是利用指针
同样保存字符串数组也有两种方式,一是利用数组,一是利用指针
当字符串是可变的,用数组存储。