数组和指针参数是如何被编译器修改的
2014-03-10 23:05
274 查看
“数组名被改写成一个指针参数”规则并不是递归定义的。数组的数组会被改写成“数组的指针”,而不是“指针的指针”:
实参 所匹配的形参
数组的数组 char c[8][10]; char (*)[10]; 数组指针
指针数组 char *c[10]; char **c; 指针的指针
数组指针(行指针) char (*c)[10]; char (*c)[10]; 不改变
指针的指针 char **c; char **c; 不改变
被修改成指针的只是数组名,只修改最左面的维度为指针
zz http://blog.csdn.net/ylyuanlu/article/details/9170271
1)方法一
my_func(int array[10][20]);
这样的方法虽然简单,但同时也是作用做小的声明方式,因为它只能处理10行20列的int类型的数组,如果要一个更为普通的多维数组形参的方法,使函数能操作任意长度数组。
2)方法二
my_func(int (*array)[20]);
这样可以确保他被编译器当做一个指向20个元素的int数组的指针,但对于二维数组的参数传递,它并不具有通用性,因为还有一个20感觉很糟糕。
3)方法三
本为的第二小节的最后有分析过:
main(int argc, char **argv);
当然也可能是:
main(int argc, char *argv[]);
前面一种是一个指针的指针,后面一种是一个指针数组,那这里我们就可以这样声明一个比较通用的可以传递二维数组的函数:
my_func(int **array);或者
my_func(int *array[]);
这样也可以通过最后一个指针元素设置成NULL来标识该二维数组的结束。实际上,我们真的可以通过一些技术来解决一维和二维数组的通用声明,但是对于三维和更多维的数组都无法实现的很好,这也是C语言的一个内在限制。
实参 所匹配的形参
数组的数组 char c[8][10]; char (*)[10]; 数组指针
指针数组 char *c[10]; char **c; 指针的指针
数组指针(行指针) char (*c)[10]; char (*c)[10]; 不改变
指针的指针 char **c; char **c; 不改变
被修改成指针的只是数组名,只修改最左面的维度为指针
zz http://blog.csdn.net/ylyuanlu/article/details/9170271
1)方法一
my_func(int array[10][20]);
这样的方法虽然简单,但同时也是作用做小的声明方式,因为它只能处理10行20列的int类型的数组,如果要一个更为普通的多维数组形参的方法,使函数能操作任意长度数组。
2)方法二
my_func(int (*array)[20]);
这样可以确保他被编译器当做一个指向20个元素的int数组的指针,但对于二维数组的参数传递,它并不具有通用性,因为还有一个20感觉很糟糕。
3)方法三
本为的第二小节的最后有分析过:
main(int argc, char **argv);
当然也可能是:
main(int argc, char *argv[]);
前面一种是一个指针的指针,后面一种是一个指针数组,那这里我们就可以这样声明一个比较通用的可以传递二维数组的函数:
my_func(int **array);或者
my_func(int *array[]);
这样也可以通过最后一个指针元素设置成NULL来标识该二维数组的结束。实际上,我们真的可以通过一些技术来解决一维和二维数组的通用声明,但是对于三维和更多维的数组都无法实现的很好,这也是C语言的一个内在限制。
相关文章推荐
- C专家编程 十三 数组和指针参数是如何被编译器修改的
- 《c专家编程》笔记--数组和指针参数是如何被编译器修改的
- 数组和指针参数是如何被编译器修改的
- C专家编程--数组和指针如何被编译器修改的
- 结构体参数的传递以及如何修改指针参数的值
- C语言中指针数组作为参数传递修改内容
- 结构体参数的传递以及如何修改指针参数的值
- 如何理解数组作为函数参数时,数组名就是指针?
- 如何理解数组作为函数参数时,数组名就是指针?
- 微信小程序中如何使用setData修改数组或对象中的某一参数
- 如何传递指向结构数组的指针 (函数参数)
- 二维数组做函数参数,如何将三维数组降为二维数组,指向数组的指针的使用
- 修改程序清单7.7中的3个数组处理函数,使之使用两个指针参数来表示区间.
- C语言 第 7 节 如何将字符串指针指向的内容赋值给数组
- 如何展开 Visual c + + 调试器监视窗口中的数组指针
- lxc如何修改配置参数
- 数组参数与指针参数
- C语言 内存分配 地址 指针 数组 参数 实例解析
- 字符串指针和字符串数组 值的修改
- 83 js 如何正确传递DOM元素的指针 选择器内参数为变量 论js函数的简化 seajs用法