公司如何做网站推广,线下推广方法及策略,哈尔滨房地产网站建设,分类信息免费发布大全目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组
数组的创建
数组是一组相同类型元素的集合。
int arr1[10];
char arr3[10];
float arr4[10];
double arr5[10];下面这个数组能否成功创建#xff1f;
int count… 目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组
数组的创建
数组是一组相同类型元素的集合。
int arr1[10];
char arr3[10];
float arr4[10];
double arr5[10];下面这个数组能否成功创建
int count 10;
int arr2[count];**注**在C99标准之前 [] 中要给一个常量才可以不能使用变量。在C99标准支持了变长数组的概念数组的大小可以使用变量指定但是数组不能初始化。不过在C90标准下仍然有一些不能实现所以具体能否实现还是要看编译环境。
初始化
int arr1[10] {1,2,3};
int arr2[] {1,2,3,4};
int arr3[5] {12345}
char arr4[3] {a,98, c};
char arr5[] {a,b,c};
char arr6[] abcdef;上述都是正确的数组初始化数组在创建的时候如果想不指定数组的确定的大小就得初始化。数组的元素个数根据初始化的内容来确定。
char arr1[] abc;
char arr2[3] {a,b,c};这两行代码都是给数组初始化为abc三个字符但是在内存中的分配是不一样的。
使用
我们之前介绍了一个操作符 [] 下标引用操作符。它其实就数组访问的操作符。
#include stdio.h
int main()
{int arr[10] { 0 };//数组的不完全初始化//计算数组的元素个数int sz sizeof(arr) / sizeof(arr[0]);//对数组内容赋值,数组是使用下标来访问的下标从0开始。所以int i 0;//做下标for (i 0; i 10; i){arr[i] i;}//输出数组的内容for (i 0; i 10; i){printf(%d , arr[i]);}return 0;
}注意
数组是通过下标来访问的下标是从0开始。数组的大小可以通过计算得到。
int arr[10];
int sz sizeof(arr)/sizeof(arr[0]);在内存中的存储
#include stdio.h
int main()
{
int arr[10] {0};
int i 0;int sz sizeof(arr)/sizeof(arr[0]);for(i0; isz; i)
{
printf(arr[%d] %p\n, i, arr[i]);
}
return 0;
}我们通过打印地址来观察数组在内存中的存吃是怎么样的 十六进制是从0 ~ 9A ~ F相当于10~15观察输出的结果可以发现当下标增长1元素的地址增加4从低地址到高地址非常有规律地增加数组在内存中是连续存放的
二维数组
创建
int arr[3][4];
char arr[3][5];
double arr[2][4];初始化
int arr[3][4] {1,2,3,4};
int arr[3][4] {{1,2},{4,5}};
int arr[][4] {{2,3},{4,5}};注意 二维数组如果有初始化行可以省略列不能省略。
int arr[][4] {{2,3},{4,5}}; //正确写法
int arr[4][] {{2,3},{4,5}}; //错误写法使用
和一维数组一样通过下标访问。
#include stdio.h
int main()
{int arr[3][4] { 0 };int i 0;for (i 0; i 3; i){int j 0;for (j 0; j 4; j){arr[i][j] i * 4 j;}}for (i 0; i 3; i){int j 0;for (j 0; j 4; j){printf(%d\t, arr[i][j]); //为了好看加制表符并换两行}printf(\n\n); }return 0;
}在内存中的存储
#include stdio.h
int main()
{int arr[3][4];int i 0;for (i 0; i 3; i){int j 0;for (j 0; j 4; j){printf(arr[%d][%d] %p\n\n, i, j, arr[i][j]);}}return 0;
}通过观察我们发现二维数组在内存中也是从低地址到高地址连续存储的。
数组越界
数组的下标是有范围限制的。
数组的下规定是从0开始的如果数组有n个元素最后一个元素的下标就是n-1。 所以数组的下标如果小于0或者大于n-1就是数组越界访问了超出了数组合法空间的访问。
C语言本身是不做数组下标的越界检查编译器也不一定报错但是编译器不报错并不意味着程序就是正确的所以程序员写代码时最好自己做越界的检查。
#include stdio.h
int main()
{
int arr[10] {1,2,3,4,5,6,7,8,9,10};int i 0;for(i0; i10; i){printf(%d\n, arr[i]);//当i等于10的时候越界访问了}
return 0;
}二维数组也存在行或列可能越界的问题。