文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>指向指针的指针和指向数组的指针

指向指针的指针和指向数组的指针

时间:2010-04-28  来源:chenweiming507

作为函数参数的多维数组名在传递方式和一维数组名相同-- 实际传递的是个指向数组第一个元素的指针.但是两者之间的区别在于,多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便函数形参的下标表达式进行求值.这里有两个例子,说明了它们之间的区别: int vector[10]; ... funcl(vector); 参数vector的类型是指向整型的指针,所以funcl的原型可以是下面两种中的任何一种: void funcl(int *vec); void funcl(int vec[]); 作用于vec上面的指针运算把整型的长度作为他的调整因子. 现在让我们来观察一个矩阵: in matrix[3][10]; ...... func2(matrix); 这里,参数matrix的类型是指向包含10个整型元素的数组的指针.父女出的原型应该是怎么样的呢? 你可以使用下面两种形式中的任何一种: void func2(int (*mat)[10]); void func2(int mat[][10]); 在这个函数中,码头的第一个下标根据包含10个元素的整型数组的长度进行调整,接着第2个下标根据整型的长度进行调整,这个原先的matrix数组一样. 这里的关键在于编译器必须知道第2个及以后各维的长度才能对下标进行求值,因此在原型中必须声明这些维的长度,第一维的长度并不需要,因为在计算下标值时用不到,因为vec++ 和vect++都是相同的都是整型的字节数作为计算的单位 在编写一维数组形参的函数原型时,你即可一把他写成数组的形式,也可以把它写成指针的形式.但是,对于多维数组,只有第一维可以进行如此选择.尤其是,把func2写成下面这样的原型是不正确的: void func2(int **mat); 这个例子把码头声明为一个指向整形指针的指针,他和指向整型数组的指针并不是一回事. 因为mat++ 和matrix++表示并不一样. mat++ 指向下个指针是以一个整型作为间距(4个字节) matrix++指向下一个数组是一个数组的元素个数作为间距的(10个元素40个字节).
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载