标签:style blog class code java color
二维数组和二位指针在程序知识中是一个难点,往往会将人弄得头昏眼花。总结一下这个难点的相关问题。
二维数组,顾名思义就是数组的数组;二维指针是指针的指针。首先,我们来看看二维数组和二维指针等价的问题。
在《C专家编程》10.3节的小启发里讲的很透彻:(以下这段文字及对比一定要认真分析!)
数组和指针参数是如何被编译器修改的?
“数组名被改写成一个指针参数”规则并不是递归定义的。数组的数组会被改写成“数组的指针”,而不是“指针的指针”:
实参 所匹配的形参
数组的数组 char c[8][10]; char (*)[10]; 数组指针
指针数组 char *c[10]; char **c; 指针的指针
数组指针(行指针) char (*c)[10]; char (*c)[10]; 不改变
指针的指针 char **c; char **c; 不改变
可仔细体会一下上述表格,如果能理解,那是极好的,如果不能,我将举个栗子来帮助理解。
栗子1:
1 #include <stdio.h> 2 #include <string.h> 3 4 void func(char **ptr) 5 { 6 char arry[6][30] = 7 { 8 "ABCDEFG", 9 "HIJKLMN", 10 "OPQ", 11 "RST", 12 "UVW", 13 "XYZ", 14 }; 15 ptr = arry; 16 } 17 18 int main(int argc, char *argv[]) 19 { 20 char **ptr = NULL; 21 func(ptr); 22 printf("%s\n", ptr); 23 return 0; 24 }
这个栗子不多解释,完全错误的传递。
栗子2:
二维数组及二维指针的传递及一些思考,布布扣,bubuko.com
标签:style blog class code java color
原文地址:http://www.cnblogs.com/majiangjiang/p/3706472.html