一维数组的元素作为函数实参,与同类型的简单变差指量作为实参一样,是单向的值传递,即数组元素的值传给形参,从而形参是改变不影响实参
创新互联是一家专业提供云浮企业网站建设,专注与网站建设、做网站、H5网站设计、小程序制作等业务。10年已为云浮众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
数组名代表着整个数组的地址,如果一维数组的名字作为函数实参,传递的是整个数组,即形参数组和实参数组完全相同,是存放在同一存储空间的同一个数组。这样形参数组
修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。
#includestdio.h
//数组作为函数参数,可以省略元素个数
//数组作为函数参数,传递是整个数组的地址,修改猜庆此了函数形参数组元素的值,穗迅会影响到外面的实参数组
void change(int array[])
{
printf("array ==%p\n",array);
array[0] = 100;
}
int main()
{
int ages[6] = {10,11,13,15,11,18};
printf("array ==%p\n",ages);
change(ages);
printf("%d\n",ages[0]);
return 0;
}
输出结果为: array ==0x7fff5be26c00
array ==0x7fff5be26c00
100
你这是
参数传递
进去的其实是数组的地址,在函数内部修尘庆改了以后,数组的内容就已经真正前兆的修改了,所以函数返回以后,继续访问这个数组慧兄租,得到的数据就是修改以后的。
比如:
int array[12][12];
copy_arcs(arrar)
在访问array就是修改后的数据了
经常看到C语言的main函数定义为:
int main(int argc, char *argv[]),但是在函数毁冲体中经常是根本不用main函数中的这两个参数,这两个参数用于纤和歼在运行程序时,从外部给程序传递参数,其中argc中保存了参数的个数,argv中分别保存了各个参数.
例如一个程序的main()函数头部形如int main(int argc, char *argv[]),编译链接后生成的可执行文件名为a.exe,那么请注意下面的调用:
a.exe abc def
在上面的命令行中棚局,a.exe是要运行的程序名称,后面的abc和def就是传入程序的两个参数,这两个参数就通过argc和argv传入程序,注意这些参数都是字符串。
通过上面的调用,在这个程序中,argc=3,a.exe是第一个参数,这个字符串将保存在argv[0]中,abc和def分别是第二和第三个参数,它们分别被保存在argv[1]和argv[2]中
如果是诸如函数禅辩声明int fun(int b[]),这个是传的地址,如果fun内部有赋值操作,那么会改变数组b的元素的值
如果是执行语句fun(b[i]);那么传的就是b[i]这个值,执行完fun后,b[i]的值不会变
a是一个指向指针的指针,a里面的内容是另一个指针p的地址,那么*a就是p的地址,**a就是*p。
同理,b的内容贺激缺是另一个指针q的地址,*b就是q的地址,**b就是*q
t = *a, 那么t的内容就是p的地址,
*a = *b, a里面的内容变成了q的地址,即*a是q的地址,**a就是*q
*b = t, b里面的内容变成了p的地址,即*b是p的地址,**b就是*p
这三句,将**a的值和**b的值互换了,是对指针的操作。
传值方式:向函数传递参数时,先复制一份参数,然后才将复制品传给参数。函数中所有对参数的操作,就只是在使用复制品。不会改变传递前的参数本身。
传址方式:将地址传送给铅哪函数,函数对该地址的内容操作,相当于对实参本身的操作