函数之间二维数组多种表示方法的传递问题
被搞的有点迷糊。。。。代码1
程序代码:
#include <stdio.h> #define ROWS 2 #define COLS 100 void print_alldata(char *szdata[], int rows); int main(void ) { char szdata[ROWS][COLS]={ "this is the first line!", "this is the second line!" }; print_alldata(szdata, ROWS); return 0; } void print_alldata(char *szdata[], int rows) { for(int i = 0; i < rows; ++i) puts(szdata[i]); }
代码2
程序代码:
#include <stdio.h> #define ROWS 2 #define COLS 100 void print_alldata(char *szdata[], int rows); int main(void ) { char *szdata[ROWS]={ "this is the first line!", "this is the second line!" }; print_alldata(szdata, ROWS); return 0; } void print_alldata(char *szdata[], int rows) { for(int i = 0; i < rows; ++i) puts(szdata[i]); }
代码3
程序代码:
#include <stdio.h> #define ROWS 2 #define COLS 100 void print_alldata(char szdata[][COLS], int rows); int main(void ) { char szdata[ROWS][COLS]={ "this is the first line!", "this is the second line!" }; print_alldata(szdata, ROWS); return 0; } void print_alldata(char szdata[][COLS], int rows) { for(int i = 0; i < rows; ++i) puts(szdata[i]); }
代码4
程序代码:
#include <stdio.h> #define ROWS 2 #define COLS 25 void print_alldata(char *szdata, int ); int main(void ) { char szdata[ROWS][COLS]= { {"this is the first line!\n"}, {"this is the second line!\n"} }; print_alldata(szdata,50); return 0; } void print_alldata(char *szdata, int rows) { int i; for(i = 0; i < rows; ++i) printf("%c",szdata[i]); }
代码1运行有问题,其他都可以,代码4是用一级指针处理二维数组。
-----------------------------------------
问题如下:
1、代码1和代码2的区别就有一个地方,为啥szdata[ROWS][COLS]改为*szdata[ROWS]之后就能运行了?
2、代码4中char szdata[ROWS][COLS];定义完成之后szdata是指向COLS个元素的数组,而void print_alldata(char *szdata, int rows)这里面的szdata却只是指向了一个字符,指向大小不一样的指针也能传递吗?
理解得不太顺利,想让高人帮忙下详细分析下,谢谢了。
PS:我是这么想的,
szdata[ROWS][COLS](这个szdata本质上是数组指针)和*szdata[ROWS](szdata是指向字符的指针的指针)。指针指向大小不一样以为不可以传递,但是出现代码4之后我凌乱了,那个是szdata[ROWS][COLS](这个szdata本质上是数组指针)传递给char *szdata它啊,这明显不一样,但是还是可以运行。