一维数组的创建和初始化
数组的创建
数组是一组相同类型元素的集合。
数组的创建方式:
type_t arr_name [const_];
//type_t 是指数组的元素类型
//const_n 是一个常量表达式,用来指定数组的大小
数组创建的实例
//代码1
int arr1[10];
//代码2
int count = 10;
int arr2[count];//数组不可以正常创建
//代码3
char arr3[10];
float arr4[1];
double arr5[20];
注:数组创建,【】中必须是一个常量,使用变量则会报错。
数组的初始化
int arr1[10] = {1,2,3};
int arr2[] = {1,2,3,4};
int arr3[5] = {1,2,3,4,5};//完全初始化
char arr4[] = {'a',98,'c'};
char arr5[] = {'a','b','c'};
char arr6[] = "abcdef";
数组在创建得时候如果想不指定数组得确定的大小就得初始化。数组得元素个数根据初始化得内容来确定。
但是对于下面得代码要区分,内存中如何分配?
char arr1[] = "abc";
char arr2[3] = {'a','b','c'};
int main()
{
char arr1[] = "abc";
char arr2[3] = {'a','b','c'};
printf("%d\n", sizeof(arr1));//输出4
printf("%d\n", sizeof(arr2));//输出3
printf("%d\n", strlen(arr1));//输出3
printf(""%d\n, strlen(arr2));//输出一个随机值
return 0;
}
解释如下:
arr1 ----> a b c \0 ----> 占4个字节(sizeof)
arr2 ----> a b c ----> 占3个字节(sizeof)
arr1 ----> a b c \0 ----> 占3个字节(strlen)
arr2 ----> a b c ----> 随机值(strlen)因为后面遇到\0是随机的,不确定的
#include <stdio.h>
#include <string.h>
int main()
{
//创建一个数组 - 存放整形 - 10个
//int arr[10] = {1,2,3};//不完全初始化,剩下的元素默认初始化为0
//char arr2[5] = {'a','b'};//将b改为98也是可行的,98是b的
//char arr3[5] = "ab";//ok
char arr4[] = "abcdef";
printf("%d\n", sizeof(arr4));//输出结果是7,
//sizeof 计算 arr4所占空间的大小
printf("%d\n", strlen(arr4));//输出结果是6,strlen - 遇到\0停止,不记录
//strlen 求字符串的长度
//[a b c d e f \0]
//int n = 5;
//char ch[n];//err
return 0;
}
1、strlen 和 sizeof 没有什么关联
2、strlen 是求字符串长度的 - 只能针对字符串求长度 - 库函数 - 使用得引用头文件
3、sizeof 计算变量、数组、类型得大小 - 单位是字节 -操作符
一维数组的使用
对于数组的使用我们之前介绍了一个操作符:【】,下标引用操作符。它其实就是数组访问的操作符。代码如下:
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "abcdef";//[a][b][c][d][e][f][\0]
printf("%c\n", arr[3]);
int i = 0;
//int len = strlen(arr);
//for (i = 0; i < len; i++)
for (i=0; i<(int)strlen(arr);i++)
{
printf("%c ", arr[i]);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
//对数组内容赋值,数组是使用下标来访问的,下标从0开始,所以:
printf("%d\n", sz);
int i = 0;//做下标
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
总结:
1、数组是使用下标来访问的,下标是从0开始的;
2、数组的大小可以通过计算来得到;
一维数组在内存中的存储
代码如下:
#include <stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for (i = 0; i < sz; i++)
{
printf("&arr[%d] = %p\n",i, &arr[i]);
}
return 0;
}
随着数组下标的增长,元素的地址,也在有规律的递增。由此可以得出结论:数组在内存中是连续存放的。