C语⾔中将⼆维数组作为函数参数来传递
c语⾔中经常需要通过函数传递⼆维数组,有三种⽅法可以实现,如下:
⽅法⼀,形参给出第⼆维的长度。
例如:
#include <stdio.h>
void func(int n, char str[ ][5] )
{
int i;
for(i = 0; i < n; i++)
printf("/nstr[%d] = %s/n", i, str[i]);
}
void main()
{
char* p[3];
char str[][5] = {"abc","def","ghi"};
func(3, str);
}
⽅法⼆,形参声明为指向数组的指针。
例如:
#include <stdio.h>
void func(int n, char(*str)[5] )
{
int i;
for(i = 0; i < n; i++)
printf("/nstr[%d] = %s/n", i, str[i]);
}
void main()
{
c语言二维数组表示方法char* p[3];
char str[][5] = {"abc","def","ghi"};
func(3, str);
}
⽅法三,形参声明为指针的指针。
例如:
#include <stdio.h>
void func(int n, char**str)
{
int i;
for(i = 0; i < n; i++)
printf("/nstr[%d] = %s/n", i, str[i]);
}
void main()
{
char* p[3];
char str[][5] = {"abc","def","ghi"};
p[0] = &str[0][0];
p[1] = str[1];
p[2] = str[2];
func(3, p);
}
附加,第三种传参⽅式说明:在函数中使⽤传参过来的⼆维数组(指针)进⾏数组取值的时候不能使⽤(array[i][j])这种形式来取值。应该将⼆维数组看成⼀个⼀维数组,使⽤array[i * j + j]这种形式来进⾏取值。
个⼈理解:这是因为在传参的时候,我们将array[][]数组当成⼆级指针来进⾏传递,所以我认为他是将数组的属性退化成了⼆级指针的属性,因此这⾥并不能使⽤array[i][j]这种⽅式来进⾏数组取值。输出格式如下
int tag = 0;//tag标记,在⽅法中输出⼆维数组时所需要的标记
printf("使⽤传递过来的⼆维数组参数输出⼆维数组\n");
for(i = 0; i < rows*columns; i++) {
printf("%d,", array[i]);
if(tag == columns-1) {
tag = 0;
printf("\n");
} else {
tag++;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论