C数组和指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C数组和指针相关的知识,希望对你有一定的参考价值。

C数组和指针

  C语言中的指针与数组这两个概念之间的联系是如此的紧密,以至于如果不能理解一个概念,就无法彻底理解另一个概念。且C对这些概念的处理与其他语言都有所不同。

  1,C语言中只有一维数组,并且数组的大小必须在编译期间就作为一个常数确定下来。由于C语言中的数组的元素可以是任何的类型,当然也可以是另外的一个数组,因此可以“仿真”出多维数组。  

  2,对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关数组的所有操作实际上都是通过指针进行的,哪怕看起来再怎么不像指针的操作也是。

  3,如果定义了一个数组a[3],那么,除了a被用于运算符sizeof的参数这种情况,在其他所有的情况下数组名a都代表指向数组a中下标为0的元素的指针;而sizeof(a)得到的是数组a中所有元素的个数,而不是指向数组a的元素的指针大小。

  4,由上一条可知,*a即数组a中下标为0的元素的引用。由于a是指向数组a的位置0的指针,因此a+i就是指向数组a的i位置的指针,*(a+i)就是这个指针的引用,这种写法是如此的常用,因此被简写为a[i](令人震惊的事实)。另外,由于a+i与i+a的含义一样,因此a[i]与i[a]也具有同样的含义。

  5,指针的算数运算:如果一个指针指向数组的一个元素,那么这个指针加1,就得到了指向该数组的下一个元素的指针;如果减1,就的到了指向前一个元素的指针,其他的数字也一样。如果两个指针都指向同一个数组的元素,那么这两个指针的差就是它们两者之间的元素个数;但是如果这两个指针不是指向同一个数组的元素,那么指针减法是无法保证正确性的。两个指针相加毫无意义。

  6,数组的标识符代表的是数组的起始地址,所以数组的标识符不是左值,不能给它赋值,可以把数组的标识符看做是数组起始处的只读指针。当把数组作为函数参数传递时,实际上真正声明的是一个指针(或者另一个说法:当数组作为函数参数传递时,退化为一个指向数组起始位置的指针)。另外,数组只能作为指针传递,且不可以按值传递。

  7,关于二维数组,定义 int cal[12][31],其意思是:cal是一个数组,该数组拥有12个数组类型的元素,其中每个元素都是一个拥有31个整形元素的数组(而不是拥有31个元素,每个元素都是数组元素为12的数组)。

 

以上是关于C数组和指针的主要内容,如果未能解决你的问题,请参考以下文章

c语言中如何通过二级指针来操作二维数组

C语言指针指向一维数组与二维数组?

C语言之数组指针指针数组

C语言之数组指针指针数组

C语言指针Ⅶ 指针运算指针+-整数指针-指针指针的关系运算标准关系标准规定指针和数组二级指针指针数组。

C/C++中的指针数组和数组指针