用指针传递函数参数 声明和定义什么时候用*a 什么时候用a[]?
用指针传递函数参数声明和定义什么时候用*a什么时候用a[]?划线部分:只有在函数原型或函数定义头中,才可以用intar[]代替int*ar又说intar[]只能用于声明形...
用指针传递函数参数 声明和定义什么时候用*a 什么时候用a[]?划线部分 :只有在函数原型或函数定义头中,才可以用int ar[]代替int *ar
又说int ar[]只能用于声明形式参数
这两个说法不是相抵触的吗
第二张图片 emmmm 我好乱 展开
又说int ar[]只能用于声明形式参数
这两个说法不是相抵触的吗
第二张图片 emmmm 我好乱 展开
展开全部
这里谈论的是函数的形式参数问题。
函数原型或函数定义头 里的 参数,就是形式参数。
int *a 作为形式参数,它可以传递一个int 形变量的地址,可以用来传递一个整型量,或一个数组的首地址。int a[] 可以传递一个数组的首地址,不能用来传递一个整型量。
当用来传递一维数组时,你可以用int *a ,也可以用 int a[] 做函数的形参。至于数组的大小,需要用别的参数 例如 int n 来传递,或用全局量来传递。
这里没有讨论别的情况。例如 int *a 也可以用来传递2维和多维数组。
这里没有讨论程序中的变量声明和初始化。例如 int a[]={1,2,3,4}; 数组大小初始化成4。
函数原型或函数定义头 里的 参数,就是形式参数。
int *a 作为形式参数,它可以传递一个int 形变量的地址,可以用来传递一个整型量,或一个数组的首地址。int a[] 可以传递一个数组的首地址,不能用来传递一个整型量。
当用来传递一维数组时,你可以用int *a ,也可以用 int a[] 做函数的形参。至于数组的大小,需要用别的参数 例如 int n 来传递,或用全局量来传递。
这里没有讨论别的情况。例如 int *a 也可以用来传递2维和多维数组。
这里没有讨论程序中的变量声明和初始化。例如 int a[]={1,2,3,4}; 数组大小初始化成4。
展开全部
这书的讲法有问题吧。
void fun1(int *,int); //函数声明,可以省略形参p、len,或者随便写个变量名也行
void fun2(int [],int); //函数声明,可以省略形参p、len,或者随便写个变量名也行,和void fun2(int *,int)等价
int main()
{
//声明定义数组,显示指定长度为3,显示指定了2个元素,其它的默认0.
int a[3] = {1,2}; //数组长度为3,3个元素分别为1,2,0.
//声明数组并立即初始化时,可以不用指定数组大小,由初始化表达式决定数组大小
int b[] = {1,2,3}; //数组长度为3,即int b[3] = {1,2,3};
int c[]; //编译错误,没有大括号初始化表达式时必须指定数组元素个数。
return 0;
}
//函数定义,因为代码体会用到形参,所以一般不能省略形参p、len
//如果函数实现体中确实没有用到某参数,则也可以省略该参。
void fun1(int *p,int len)
{
//略
}
//数组
void fun2(int p[],int len) // 和void fun2(int *p,int len)等价
{
//略
}
总结:
函数声明中,形参是什么名都无所谓,可以省略,即使有也会被编译顺忽略,函数声明只关注“函数名、返回类型、形参个数以及各形参依次类型”。
函数定义中不是不能省略形参,关键是看函数体有没有用到它。
不管是函数声明还是定义中,数组类型参数都会退化为指针,比如int [ ]会退化为 int *.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询