Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1587598
  • 博文数量: 441
  • 博客积分: 20087
  • 博客等级: 上将
  • 技术积分: 3562
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-19 15:35
文章分类

全部博文(441)

文章存档

2014年(1)

2012年(1)

2011年(8)

2010年(16)

2009年(15)

2008年(152)

2007年(178)

2006年(70)

分类: C/C++

2007-03-29 11:36:40

3.1 指针和数组
    对于c语言中的数组,有两点要注意:
    一、c语言中只有一维数组,而数组的大小必须在编译期间就作为一个常数确定下来"c语言中只有一维数组",刚一听到这样的说法,感觉和平时看的书上说的完全不同,c语言明明有多维数组吗?且看下面的解释,c语言虽然只有一维数组,但是c语言中数组的元素可以是任何类型的对象,当然也可以是数组。这样,要"仿真"一个多维数组就不成问题。
    二、对于数组我们只能做两件事情,确定该数组的大小,以及获得指向该数组下标为0的元素的指针。其它的有关数组的操作,哪怕它们看上去是以数组下标进行运算的,实际上都是通过指针来进行的。换句话说,任何一个数组下标运算都等同于一个对应的指针运算,因此,我们可以完全依据指针行为定义数组下标行为。
   对于声明: int calendar[12][31]; 的理解:
   这个数组拥有12个数组类型的元素,每个元素是一个拥有31个整形元素的数组。
   如果一个指针指向一个数组元素,那么指针减1,指向数组的上一个元素,指针加1,指向数组的下一个元素。
   int a[10];
   int *p = a; // 或者int *p = &a[0],令指针指向数组的第一个元素
   数组名实际上是一个常量指针,它本身不能被修改,但它指向的内容可以被修改,如果对它指向的内容进行修改,实际上就是改变数组元素的值,数组名作为一个指针它指向数组的第一个元素。除了a被用作sizeof的参数之外,其它所有情况下数组名a都代表指向数组a中下标为0的元素的指针。
  我们可以用p++,改变指针p,让它指向数组a的下一个元素,但是不能用a++来指向数组a的下一个元素,因为a是一个常量指针,它的值是不能被改变的,它是一个右值,而作为++运算符要求一个左值。
  *a代表数组下标为0的元素的值,那么*(a+i)代表数组中下标为i的元素,因为它的常用,所以被简记为a[i] 。由于a + i和 i + a 的含义一样,所以对应的简写 a[i] 和 i[a]也是一样。对于后一种写法i[a]不提倡,但它是正确的,也体现了指针和数组之间的密切关系。

3.2  非数组的指针
     在c语言中,字符串常量代表了一块包括字符串所有字符以及一个空字符'\0'的内存区域的地址。

3.3  作为参数 的数组声明
     在c语言中,是不能将数组直接作为参数来传递的,当我们用数组名作为参数时,该数组名会立即被转换为指向数组第一个元素的指针。即 int strlen(char s[]); 和 int strlen(char *s); 是完全一样的。
阅读(987) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~