数组

来源:互联网 发布:中国调查数据网 编辑:程序博客网 时间: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个地址,整个数组的地址,访问整个数组

5strlen从某个地址开始到遇到\0结束,总共的字符数