一、
一
维数组
1.一维数组的创建和初始化
数组的创建>:
常见的数组类型有int、char、指针类型(指针数组还有不太常见的数组指针数组等等);
数组的格式创建为 : 数组成员类型+数组名+[元素的个数] ;
(元素个数可以不写,但是必须初始化,数组大小为初始化后的大小)
数组的初始化>:
eg1:int [3]={1,2,3};
eg2:int [3]={1,2};
eg3: int * arr[ 3 ]={p1,p2} //p1,p2为整形指针;
//若未完全初始化数组,如(eg2;),则剩余数组内容为0,字符类型为(‘\0’)(即0)
//指针类型为随机值,如(eg3);
//若没有初始化数组,数组内容为随机值
eg4: char s1[ ]="abcd";
eg5: char s2[ ]={ 'a' ,'b' ,'c' ,'d' ,'\0' };
//字符串数组初始化 eg3==eg4;
//用 “ ” 对字符串进行操作,代表字符串数组初始化,在字符串后自动加 ‘\0’ ;
3.一维数组的存储
数组存储首先是==>开辟数组相应的大小空间==>然后按照下标从小到大依次储存==>储存时从低地址处向高地址处依次对数组进行储存;
4.一维数组的指针访问
4.一维数组的指针访问
数组名代表数组首元素地址,通过数组名和整数的加减就可以实现通过指针对数组进行访问。
二、二维数组
1.二维数组的创建和初始化
1.二维数组的创建和初始化
二维数组和一维数组大致相同,但是二维数组中的单个元素为数组,元素数组的大小为第二个方括号内值的大小。
//如 int a [2][3]; 其实这个二维数组含有两个元素,每个元素为int [3] (大小为三个整形空间的一维数组);
2二维数组的存储
2二维数组的存储
二维数组存储与一维数组大致相同.
如int a[2][3]; 从低地址到高地址依次储存,元素数组的内容也是依次从低地址到高地址储存;
3二维数组的指针访问
3二维数组的指针访问
数组名代表数组首元素地址,数组首元素为一维数组。
a[1][1]= *(*(a+1)+1)
// *(a+1 ) 为 拿到二维数组首元素数组 的首元素地址;
// *(a+1)相当于一维数组的数组名
数组越界的相关越界:
#include<stdio.h>
int main()
{
int arr[10];
int i = 0;
for (i = 0; i <= 12; i++)
{
arr[9-i] = 0;
printf("ha,ha");
}
system("pause");
return 0;
}
int main()
{
int arr[10];
int i = 0;
for (i = 0; i <= 12; i++)
{
arr[9-i] = 0;
printf("ha,ha");
}
system("pause");
return 0;
}
//向数组前越界导致循环
//栈在内存分配上从高地址向低地址分配,先创建数组,后创建变量 i;变量i在低地址处。
//如下图所示
#include<stdio.h>
int main()
{
int i = 0;
int arr[10];
for (i = 0; i <= 12; i++)
{
arr[i] = 0;
printf("ha,ha");
}
system("pause");
return 0;
}//向数组后越界导致循环,大致原理同上。