所在的位置: C++ >> C++市场 >> C语言数组一

C语言数组一

北京中科白癜风医院科学大讲堂 https://baike.baidu.com/item/%E5%88%98%E4%BA%91%E6%B6%9B/21900249?fr=aladdin

一维数组

一维数组的创建和初始化

创建

intarr[10];

创建数组时必须定义数组元素的类型以及数组的大小。

上述代码定义了可以存储10个int类型的数组。

数组创建时方括号中必须是常量,不能是变量。

例如下述代码

intmain()

{

intn=10;

intarr[n];

//error

return0;

}

这段代码中,n是变量不能用来创建数组,所以错误。

那有人问,用const修饰的变量可以视为常量,可以用来创建数组码?答案是不行,虽然用const修饰,但是它的本质啊还是变量,依然不能用来创建数组。

intmain()

{

  constintn=10;

  intarr[n];

//error

  return0;

}

我在VS编译器上编译这段代码后报出以下错误:

其他长见的一些常量可以用来创建数组:

#define定义的常量

#defineMAX10

intmain()

{

  intarr[MAX];

  return0;

}

枚举类型定义的常量

enums

{

  n=10

};

intmain()

{

  intarr[n];

  return0;

}

上述两种方式用来创建数组都是可以的。

初始化

在创建数组后可以对其进行初始化,也可以不用初始化,这取决于个人习惯。

#defineMAX10

intmain()

{

  intarr1[MAX]={0,1};

  intarr2[MAX]={0,1,2,3,4,5,6,7,8,9};

  return0;

}

初始化可以进行局部初始化,例如arr1数组,也可以进行全部初始化,例如arr2。

局部初始化的数组arr1,除了前两个数之外,其他的默认为0。

没有进行初始化的数组,里面会放入随机内容。

一维数组在内存中的存储

数组在内存中是连续存放的。

我们可以创建一个数组,依次打印出数组中每个元素的地址。

#defineMAX10

#includestdio.h

intmain()

{

  chararr[MAX];

  inti=0;

  for(i=0;iMAX;i++)

  {

    printf("%p\n",arr[i]);

  }

  return0;

}

定义了一个有10个char类型的数组,每个char类型在内存中占据1个字节,打印出每个元素的地址可以发现,彼此元素的地址之间相差1个字节,因此,数组的元素在内存中是连续存放的。

一维数组的访问

下标引用操作符访问

#defineMAX10

#includestdio.h

intmain()

{

  intarr[MAX]={0,1,2,3,4,5,6,7,8,9};

  inti=0;

  for(i=0;iMAX;i++)

  {

    printf("%d",arr[i]);

  }

  return0;

}

数组的下标从0开始(也就是第一个元素的下标),依次往后+1。

上述代码就遍历了一遍数组,打印出了数组的元素,运行结果如图:

地址访问

数组名是首元素的地址,我们可以以下代码来证明

#defineMAX10

#includestdio.h

intmain()

{

  chararr[MAX];

  if(arr[0]==arr)

  {

    printf("arr[0]andarraresame\n");

  }

  else

  {

    printf("arr[0]andarrarenotsame\n");

  }

}

运行结果如下

因此数组名表示数组首元素的地址。

那么如何通过地址来访问数组元素的?

#defineMAX10

#includestdio.h

intmain()

{

  intarr[MAX]={0,1,2,3,4,5,6,7,8,9};

  inti=0;

  for(i=0;iMAX;i++)

  {

    printf("%d",*(arr+i));

  }

}

数组名表示首元素的地址,而且数组元素在内存中又是连续存放的,所以让arr依次+1便可以得到数组每个元素的地址,再对地址进行解引用,就可以访问到这个元素。

运行结果如下




转载请注明:http://www.aierlanlan.com/rzdk/4501.html

  • 上一篇文章:
  •   
  • 下一篇文章: