数组
来源:互联网 发布:中国调查数据网 编辑:程序博客网 时间:2024/06/10 02:54
1. 一维数组的初始化和创建
(1)数组元素类型 数组名[数组元素个数]
其中数组元素个数必须为常量或常量表达式,不能为变量
(2)给数组初始化:给数组初始化时,必须用{ }括起来,有以下几种方式:
int arr[10]={0}; //此时数组元素个数给10,元素值全为0
int arr[ ]={0,1,2,3,4,5}; //此时数组元素个数为6
注意:当不写数组元素个数时,初始化的个数即为数组元素个数
给数组初始化时,必须用{ }括起来
(3)可以用数组定义字符串,如int arr[]="abdcd";//字符串要用双引号引起来
(4)当给数组元素赋值或输出数组元素时,必须用循环一个一个输出
2. 一维数组的使用
引用下标操作符[ ]。如已知 int arr[10]={0}; 想要将数组第二个元素值改为2:
arr[1] = 2;
注意:数组下标是从0开始的
下标操作符[]的操作数位数组名和下标
3. 一维数组在内存中的存储
一维数组在内存中连续存储,地址随着下标的增长每次增加数组元素类型所占的字节
4. 数组和指针
int arr[10] = { 0 };
int *p=arr;
数组名arr代表数组首元素的地址,即将该地址赋给指针p
通过指针可以引用数组元素:如p+5表示数组下标为5的元素的地址
arr[5]=*(p+5),数组在运算时会将左边先转化为右边的形式,在进行运算,所以写成指针的形式效率和高
5. 二维数组
数组元素类型 数组名[数组行数][数组列数]
注意:二维数组在内存中一行一行连续存放
数组的行数可以省略,但列数一定要有
定义一个二维数组:
int arr[5][10]={0};
该二维数组可以看做由5个一维数组组成,每个一维数组有10个元素。
6. 数组的运算
数组名表示的范围
例1:
int main()
{
int arr[10] = { 0 };
printf("%p\n", arr); //数组首元素地址
printf("%p\n", arr+1);//跳过4个字节
printf("%p\n", &arr);//整个数组的地址即值为数组首元素地址
printf("%p\n", &arr+1);//跳过整个数组的字节即跳过40个字节
printf("%d\n", sizeof(arr));//数组名表示整个数组的大小,输出40
printf("%d\n", sizeof(arr+0));//代表首元素的地址,输出4
printf("%d\n",sizeof(*&arr));//&arr为整个数组地址,所以可以访问整个数组,所以字节数为40
}
例2:
#include<stdio.h>
int main()
{
char arr1[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
char arr2[] = "abcdef";
printf("%d", sizeof(arr2));//7
printf("%d", sizeof(arr2 + 0));//4
printf("%d", sizeof(*arr2));//1
printf("%d", sizeof(&arr2));//4
printf("%d", sizeof(&arr2+1));//4
printf("%d", sizeof(&arr2[0]+1));//4
printf("%d", sizeof(*&arr2));//7
printf("%d", strlen(arr1));//随机值
printf("%d", strlen(arr1+0));//随机值
//printf("%d", strlen(*arr1));//错误
//printf("%d", strlen(arr1[1]));//错误
printf("%d", strlen(&arr1));//随机值
printf("%d", strlen(&arr1+1));//随机值
printf("%d", strlen(&arr1[0]+1));//随机值
system("pause");
return 0;
}
例3
注意:
(1) sizeof()括号内单独存放一个数组名,代表整个数组的大小
(2) &arr:表示整个数组的地址
(3) 其余出现的数组名均表示首元素地址
(4)什么类型的数组访问相应的字节数,如整型地址访问4个地址,字符型地址访问1个地址,整个数组的地址,访问整个数组
(5)strlen从某个地址开始到遇到\0结束,总共的字符数