讨论c语言中,数组。
数组(Array)是一种数据结构,它相当于一个集合,这个集合里的每一个元素的数据类型都是相同的,如:int arr[];声明了一个整形数组,这个数组名叫做arr,数组的每一个元素的数据类型都是int类型。在内存中,数组的每一个元素都存储在一片连续的内存空间中,这就是说每一个元素的内存地址是相邻的。数组提供了一种简便的方式,它使得我们可以用一个单独的变量名存储和访问多个值。
#include
int main(int args, char* argv[]){
int i;
int arr[6] = {1,2,3,4,5,6};//定义一个整型数组
int length = sizeof(arr) / sizeof(arr[0]);//获取数组的长度
//使用for循环打印数组
for(i=0;i<length;i++){
printf("arr[%d]=%d, The element arr[%d] memmory address is: %x\n",i,arr[i],i,&arr[i]);
}
return 0;
}
输出:
arr[0]=1, The element arr[0] memmory address is: 61fe00
arr[1]=2, The element arr[1] memmory address is: 61fe04
arr[2]=3, The element arr[2] memmory address is: 61fe08
arr[3]=4, The element arr[3] memmory address is: 61fe0c
arr[4]=5, The element arr[4] memmory address is: 61fe10
arr[5]=6, The element arr[5] memmory address is: 61fe14
可以看到arr[0]的内存地址是:61fe00,arr[1]的内存地址是:61fe04,arr[2]的内存地址是:61fe08,内存地址是相邻的,而且每次增加4,所以每一个元素的长度是4,也就是4个字节。
int arr[6] = {1,2,3,4,5,6};
当程序运行的时候,操作系统会分配一块内存空间,这块内存空间分给数组arr的长度为:sizeof(arr),也就是24个字节。因为变量arr是局部变量,因此它会存储在栈内存(Stack)中。
下面用一张图表示数组arr在内存中的分布情况:
其实,不用数组,直接用变量也可以达到相同的效果:
#include
int main(int args,char* argv[]){
//使用变量模拟数组的效果
int one = 1;
int two = 2;
int three = 3;
int four = 4;
int five = 5;
int six = 6;
printf("value of one: \t%d, memory address of one: \t%x\n",one,&one);
printf("value of two: \t%d, memory address of two: \t%x\n",two,&two);
printf("value of three:\t%d, memory address of three: \t%x\n",three,&three);
printf("value of four: \t%d, memory address of four: \t%x\n",four,&four);
printf("value of five: \t%d, memory address of five: \t%x\n",five,&five);
printf("value of six: \t%d, memory address of six: \t%x\n",six,&six);
return 0;
}
输出:
value of one: 1, memory address of one: 61fdfc
value of two: 2, memory address of two: 61fdf8
value of three: 3, memory address of three: 61fdf4
value of four: 4, memory address of four: 61fdf0
value of five: 5, memory address of five: 61fdec
value of six: 6, memory address of six: 61fde8
可以看到内存地址的间隔是4,而int类型的变量长度也为4个字节,因为我们连续定义了6个变量,所以在内存空间中内存地址是相邻的。虽然这样也能达到数组的效果,但相对数组来说不够简洁,访问每个变量需要挨个写,而且这些变量的数据类型都是相同的。于是,数组出现了,使用一个变量名就可以操作所有的元素,非常方便。
"[]"称为数组索引操作符(Array index operator),也称数组下标(Subscript)。这个操作符通常与数组一起使用,用来检索和操作数组的元素。数组是一种最简单的数据结构,我们可以使用下标(Index)来随机访问数组的元素。在c语言中,数组可以存储int,char,double,float等基本数据类型,我们可以通过不同的方式来描述数组,声明一个数组也非常的简单,如下:
#include
int main(int args,char* argv[]){
char array[11] = {'I',' ','l','o','v','e',' ','y','o','u','!'};
return 0;
}
数组的索引((index)从0开始
。数组是一种派生的数据类型,一个数组存储了他所能容纳的元素个数。声明一个数组的时候,就确定了其长度。换句话说,在编译期间,就能确定数组的长度。和普通变量不同的是,数组一次性可以存储多个值。在程序运行时,操作系统会为程序申请一块内存空间,这块内存空间一般是连续的,数组就存储在这块内存空间中。在内存中,数组的每个元素的内存地址是相邻的,数组名称为数组在内存空间中的首地址。