我觉得你在看引用调用和值调用那一部分.
首先,其实对于int
a[10],就是在内存中开辟一段存储空间存放十个整型元素.你要明白a不是一个变量,而是一个常量地址,什么地址呢?就是指向这10个元素空间的首地址(第一个元素的地址).你可以给a赋个值试一试,编译不会通过,因为a是个常量,不是变量.
而对于变量,他就是代表一个值,可以对他进行任意赋值.
如果将数组传递给函数,因为数组名a是常量地址,所以函数形参有了主函数数组的地址,所以被调函数可以通过地址,修改主函数中数组的元素值.
明白吗?
函数不可以定义为数组,可以用函数指针来操作.
①函数指针的数组定义方法:返回值类型( * 指针变量名[Number]) (形参列表).
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址.有了指向函数的指针变量后,可用该指针变量调用函数.
扩展资料:
指针函数和函数指针的区别:
这两个概念都是简称,指针函数是指返回值是指针的函数,即本质是一个函数.我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针.其定义格式如下所示:返回类型标识符*函数名称.
返回类型可以是任何基本类型和复合类型.返回指针的函数的用途十分广泛.事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针.比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个"变量".
参考资料:百度百科 -?函数指针
方法
将该数组定义为全局变量,即:
int
g_arr;
void
fun()
{...}
main()
fun(int
arr[])
{
arr[10];
fun(arr);
}
将数组传递给函数后,数组就会退化为指针
void?fun(int?x,?int?pp[],?int?*n)
void?fun(int?x,?int?*pp,?int?*n)
//?这两种写法是等价的
pp[j++]=j;?//?这句写错了
//?应该改成
pp[j++]?=?l;?//?L才是被整除的整数,要保存的是这个
*n=j;?//?n作为一个指针,负责传出得到的数字的数量,j是计数器,当所有的计算完毕后,j的值自然是这些数字的数量
以上就是土嘎嘎小编为大家整理的c语言函数变量数组相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!