Chinaunix首页 | 论坛 | 博客
  • 博客访问: 859362
  • 博文数量: 82
  • 博客积分: 2283
  • 博客等级: 大尉
  • 技术积分: 2007
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-15 22:19
文章分类

全部博文(82)

文章存档

2012年(82)

分类: C/C++

2012-08-12 16:14:01

在32位PC机中,一个指针占4个字节(由32位地址总线决定)。
一个变量的值就是它所存储的数值,即使指针也不例外,所以无论一个指针所指的变量a的内容改变成什么,
指针本身的值(存储变量a的地址)都不会改变。因而说C中所有参数都是按值传递,这与函数中指针形参所指
的变量被改变并不矛盾,因为指针形参始终没有变化,即在函数中改变指针形参(移动指针),指针所存储的地
址实际上仍然没有被改变。
数组名是一个指针常量,它的类型是指向其元素类型的指针,切记,二维数组的元素类型是一维数组,所以二维数
组的数组名相当于一个指向一维数组的指针。

所以:
对于一维数组:void  fun( int *p)     形式上等同于  void fun( int a[ ])
对于二维数组:void  fun( int(*q)[3] ) 形式上等同于  void fun( int q[ ][3] ) , 但注意千万不能写成 void fun( int **q ) !
因为此时q表示指向整型指针的指针。
而int (*p)[10];  首先()表明p是一个指针,[ ]表明它是一个指向一维整型数组的指针。
   int a[2][2];  a并不是一个指向整型的指针,而也是一个指向整型数组的指针。

字符串常量的直接值是一个地址,所以当一个字符串常量出现在一个表达式中,它所使用的值就是这些字符存储的
地址。可以把字符串常量赋给一个指向字符的指针,但不能赋给数组。
阅读(2145) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~