字符数组
定义:用来存放字符数据的数组,字符数组的一个元素存放一个字符。
例如:char c[10];
c[0]='I';c[1]='';c[2]='m'l;c[3]='a';c[4]='';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';
以上定义了c为字符数组,包含10个元素。
10个元素就用十个格子(10个地址)来存储,即为下图:
C[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9](下标)
I |
|
m |
a |
|
h |
a |
p |
p |
y |
初始化:
char c[10]={'I','','m','a','',;'h','a','p','p','y'}; 初始化列表对其进行赋以初值。
引用数组元素
举一个例子:
int arr[10]={1,2,3};
int*p=arr;
*p=10;p++;
*p=20;
如下图:
100 104 108 112 116 1 20 124 128 132 136
|
|
|
|
|
|
|
|
|
|
第一个格子地址随机赋为100,后面每次因为是int型(4个字节)所以加4,104,108....到136。
p-->第一个格子,此时讨论p的自加含义 分别有三种
1.加一个字节
2.加一个单元格
3.加整个数组
分开来讨论,
首先是就加一个字节,把第一个格子里分成四个小格子,然后把10放进去,如此重复,问题存在于太过繁杂。我们知道一个字节是8位,那么当数字极大时会特别大的位数,十分麻烦。打个比方,从一个地方做公交去另一个地方,如果公交走100米停一次,那么走到终点得花费大量的时间,那么效率将大大降低。
然后 加整个数组 ,如果公交从始至终只有起点和终点两站,那么中间的将没法下车。整个加意味着我们从100将重新加到136,无法计算中间值。由此可见加一个单元格是最正确的做法。