函数之间二维数组多种表示方法的传递问题
被搞的有点迷糊。。。。代码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它啊,这明显不一样,但是还是可以运行。








