C语言一维数组
数组 一组数
一组相同类型元素的集合
arr_数组名
对应语法形式上如下
//想创建一个数组
int main()
{
int arr[8]; //创建一个数组 数组名为arr 数组类型为int 8个元素
char ch[5];
return 0;
}
数组的创建需要常量表达式 int n是变量
数组的初始化
int main()
{
int a = 0;//普通初始化
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//输出结果全输出 为完全初始化
int arr[10] = { 1,2,3,4,5 };//不完全初始化
int arr[] = { 1,2,3,4,5 }; //结果为5 相当于跟上面的差不多 中括号里面为空表示不限定大小,如果初始化了,则根据初始化内容,确定数组大小
char arr[5] = { 'c','i','t' };// 运行结果为 cit\0\0
char arr[]={ 'c','i','t' };//运行结果为cit
char ch3[5] = "bit";//b i t \0 0 0相当于\0
char ch3[] = "bit"; //结果为4 b i t \0
/*下面两个方法区别*/
char ch5[] = "bit";
//四个元素
char ch6[] = { 'b','i','t'};//
//结果为 b i t
return 0;
}
** 这里解释下ch6的打印结果,先是正常打印出了bit,然后因为万物皆有灵,GPU被烫到了,然后它会打印出来烫字,至于后边的蘠it,是因为GPU躺倒滚键盘的程度了**
printf("%d", strlen(ch5)); //求字符串长度 为3后面有个\0 判断字符串的长度的标准就是找到\0但是他不算长度
printf("%d", strlen(ch6));//没有\0 所以结果为随机值
一维数组的使用
[] 这是下标引用操作符
int main()
{
int arr[10] = {0};
arr[4] = 5;//下标引用操作符
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i <sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
圈起来的 左边的值为40 右边为4 因为数组元素大小 每一个元素都是一个指针 任何类型的指针永远是占四个字节
一维数组在内存中的存储
看代码:
都差4 第三个B0是因为十六进制数 逢16进1为0 虽然差4 但是就是一个元素的大小
由上可知 一维数组在内存中实现需存放的
随着数组下标的增长,地址是由低到高变化的
由概念总结到 知道第一个下标地址就能知道后面的
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
arr;//数组名是数组首元素的地址 就是1的地址 1的地址是整形的地址 所以可以把他放在整形指针里
int* p = arr;//现在1的地址就在指针p里
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d ", *p);
p++;
}
return 0;
}
因为数组在内存中是连续存放的 随意可以实现以上代码