C语言系列之数组

一.欢迎来到我的酒馆

      讨论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在内存中的分布情况:

C语言系列之数组_第1张图片

      其实,不用数组,直接用变量也可以达到相同的效果:

#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;
}

C语言系列之数组_第2张图片
      关于数组,你需要知道:

  • 数组的索引((index)从0开始
  • 数组的长度决定了它可以存储多少个元素。
  • 数组中的元素可以通过索引(index)来访问。

三.内存与数组

      数组是一种派生的数据类型,一个数组存储了他所能容纳的元素个数。声明一个数组的时候,就确定了其长度。换句话说,在编译期间,就能确定数组的长度。和普通变量不同的是,数组一次性可以存储多个值。在程序运行时,操作系统会为程序申请一块内存空间,这块内存空间一般是连续的,数组就存储在这块内存空间中。在内存中,数组的每个元素的内存地址是相邻的,数组名称为数组在内存空间中的首地址。


你可能感兴趣的:(c语言,开发语言)