二维数组和二维指针的传递问题
来源:互联网 发布:tvp animation软件 编辑:程序博客网 时间:2024/05/16 09:46
再次看这篇文章,感觉说的好多都是废话,在文章最前面补充一句话:
“[]的优先级高于*
”,大家可以带着这句话看下面的~~~
========================
再一次的见证了自己的基础不牢靠。。。幸好发现得早,看见网上说,华为的一个面试题就考了这个方面的。
借那道华为的面试题引出问题,题目:
char **p, a[16][8]; 问:p=a是否会导致程序在以后出现问题?为什么?
可能有一部分朋友会回答正确,这里他们认为,a[]是一级指针,a[][]就是二级指针。那这个到底对不对呢?
OK,用事实说话:
结果报错:
于是乎,我看了下《C专家编程》里10.5节—使用指针向函数传递一个多维数组:
方法一:
函数是:
这种方法导致只能处理2行3列的int型数组。
方法二:
可以省略第一维的长度。
函数是:
这种方法的限制略微宽松了一些,但是还是只能处理每行是3个整数长度的数组。
函数也可以写成:
方法三:
创建一个一维数组,数组中的元素是指向其他东西的指针。也可以说是二级指针。
函数是:
注意:只有把二维数组改为一个指向向量的指针数组的前提下才可以这么做!
比如:
在《C专家编程》10.3节的小启发里讲的很透彻:(以下这段文字及对比一定要认真分析!)
数组和指针参数是如何被编译器修改的?
“数组名被改写成一个指针参数”规则并不是递归定义的。数组的数组会被改写成“数组的指针”,而不是“指针的指针”:
实参 所匹配的形参
数组的数组 char c[8][10]; char (*)[10]; 数组指针
指针数组 char *c[10]; char **c; 指针的指针
数组指针(行指针) char (*c)[10]; char (*c)[10]; 不改变
指针的指针 char **c; char **c; 不改变
我在CSDN上专门为这个问题提问过:
http://topic.csdn.net/u/20101221/12/da817bda-4e88-44df-bdf8-40e8f44aacb8.html?2076366575
最后我总结下讨论结果:
只要实参的类型与形参的类型一致(或可转换)就行。
为什么这么说呢?
piaojun_pj朋友给了一段代码,分析得很给力:
- 二维数组和二维指针的传递问题
- 二维数组和二级指针的传递问题
- 二维数组和二级指针的传递问题
- 二维数组和二级指针的传递问题
- 二维数组和二级指针的传递问题
- C++:二维数组和二级指针的传递问题
- 关于二维数组和二维指针的相关问题
- 二维数组和二维指针的关系
- 二维指针和二维数组的关系
- 二维指针和二维数组的区别
- 二维数组和二维指针的关系
- 指针 二维数组的问题
- 二维数组的指针问题
- 二维数组和二维指针
- 二维数组和二维指针
- 二维数组和二维指针
- 二维指针和二维数组
- 二维数组和二维指针
- p122第17题(求平均值)
- (经典)tcp粘包分析
- 李红霞作业第三章第六题
- iptables & route
- 01-复杂度2. Maximum Subsequence Sum
- 二维数组和二维指针的传递问题
- IBM文章使用 Boost 的 IPC 和 MPI 库进行并发编程
- GPG error NO_PUBKEY
- Eclipse中常用的快捷键
- for循环中i++与++i的效率探究
- C++
- HDU 3038How Many Answers Are Wrong 带权并查集
- HDU 4549 M斐波那契数列(矩阵快速幂3)+费马小定理
- ANDROID 动态添加的listView,仿QQ滑动删除