函数里有参数是数组该怎么调用,有例子
如:voidxxx(inta,intb[]){...}intmain(){intt,k[10];xxx(t,k);...}类似看过有这样调用数组参数的.我也用程序编过,的...
如: void xxx(int a,int b[])
{...}
int main()
{int t,k[10];
xxx(t,k);...}
类似看过有这样调用数组参数的.
我也用程序编过,的确可以,甚至在xxx函数里的操作,可以直接改变数组的值.明明形参那里没有取址符号"&"啊..
有以下三问题:
1.为什么形参写成int b[],能解释下吗~我自己编写一般编int *b的;
2.为什么形参里没有取址"&"也可以改变主函数中k数组的值;
3.如果我要调用二维数组呢,一维数组我只知道可以int *b替代,但是二维不懂.难道是int b[][]..这样么???我貌似去试过..好像编译不过 展开
{...}
int main()
{int t,k[10];
xxx(t,k);...}
类似看过有这样调用数组参数的.
我也用程序编过,的确可以,甚至在xxx函数里的操作,可以直接改变数组的值.明明形参那里没有取址符号"&"啊..
有以下三问题:
1.为什么形参写成int b[],能解释下吗~我自己编写一般编int *b的;
2.为什么形参里没有取址"&"也可以改变主函数中k数组的值;
3.如果我要调用二维数组呢,一维数组我只知道可以int *b替代,但是二维不懂.难道是int b[][]..这样么???我貌似去试过..好像编译不过 展开
展开全部
可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void Func(int array[3][10]);
void Func(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void Func(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的:
void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为:
void Func(int array[3][10]);
而形参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。
void Func(int array[3][10]);
void Func(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void Func(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的:
void Func(int array[3][]);实参数组维数可以大于形参数组,例如实参数组定义为:
void Func(int array[3][10]);
而形参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。
展开全部
1,一样的
2,数组名就是数组的首地址
3二维自然就是int**b了,指向指针的指针
2,数组名就是数组的首地址
3二维自然就是int**b了,指向指针的指针
更多追问追答
追问
那里有个 [] 那也叫数组名(数组首地址)么?
对于第三个有个例子问问:
函数里如果是
char s[20][20];
void xxx(char **s)
{int i=0;
while(i++<20)
{printf("%s",(*s)++);}
}
这样就能把二维数组 20行的字符串输出么?
追答
二维指针实际访问数组的时候有许多微妙的地方,而不能简单的用**p
像“把二维数组 20行的字符串输出”,首先这个字符串是个一维数组,而不是char*,那么就是定义一个指针,它指向一个一维数组,那就是 char(*p)[],而实际定义时还必须指明这个数组的长度:char(*p)[20];
还有一种处理字符串集合更常用的方法就是定义一个数组,它的元素是char*; ,那这个二维定义就是,char *p[],同样要指明长度,char *p[20],
char(*p)[20];//p是一个指针,*p指向一个char[20];
char *p[20]; //p是一个数组,它的元素是20个char*;
而int** p就是简单的二维指针,*p指向一个int*
反正多维指针用起来很绕人,能不用就不用
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
。。。。
1.可以都一样,编译器自动把数组处理成指针。
2.不行,肯定不行。
3.二维数组,形参用 指针数组表示 :类型 (* p)[ ] 的形式表示。
你追加的问题:char **s 和char s[ ][ ]不一样你编译试试通不过。
char s[ ][ ]用char (*P)[ ]可以表示即用 char *(*p+i) +j ) 也行
1.可以都一样,编译器自动把数组处理成指针。
2.不行,肯定不行。
3.二维数组,形参用 指针数组表示 :类型 (* p)[ ] 的形式表示。
你追加的问题:char **s 和char s[ ][ ]不一样你编译试试通不过。
char s[ ][ ]用char (*P)[ ]可以表示即用 char *(*p+i) +j ) 也行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C的数组在传参以及在表达式中使用的时候, 就是一个指向该数组第一个元素的指针常量。 明白了这一点, 你的问题都不成问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |