文章标题

来源:互联网 发布:hitleap类似的软件 编辑:程序博客网 时间:2024/05/25 16:38
#include<stdio.h>void f(int s[],int*y)   //s[]代表数组作实参,地址传递,这里不能只写数组名{    static int t=3;    *y = s[t];    s[t]*=2;    t--;}void main(void){    int a[] = {1,2,3,4},i;    int x=0;    for(i=0;i<4;i++)    {        f(a,&x);        printf("%d\n",x);    }    for(i=0;i<4;i++)    {        printf("%d\t",a[i]);  //实参与形参关系,形参在地址传递条件下改变实参    }    printf("\n",x);}

c语言:利用数组名作函数参数,实现双向数据传递

数组名作函数参数与基本数据类型作函数参数相比,具有完全不同的特点。c语言规定,数组名代表数组的首地址,所以,数组名作函数参数时,是将数组的首地址由实参传递给形参,即实参数组与形参数组会公用一个相同的数组首地址和一段相同的存储单元。所以,当形参数组元素发生变化时,实参数组元素的值也会随着发生改变。

2.数组元素与数组名做实际参数的区别?
数组元素函数参数传递的是数组的值,
数组名作函数参数传递的是数组本身,
前者在函数内改变参数值对数组无影响,

3.几种数组地址传递声明?
1、数组做参数,完全无法按值传递。这是由C/C++函数的实现机制决定的。
2、传数组给一个函数,数组类型自动转换为指针类型,因而传的实际是地址。
下面三种函数声明完全等同:
void func(int array[10])
void func(int array[])
void func(int *array)

4.数组作为参数在函数原型中一定要写”void function(int array[])”,在调用时就把[]去掉,这是为什么?
调用时把【】去掉,表示掉用这个数组的所有元素,数组的名称表示数组第一个元素的地址。

数组的定义可以写成: int table[]={1,2,3,} 或者table[3],不能写成table[],因为系统在定义数组时就给数组分配了地址,table[]没有确定元素的个数,不能分配地址空间。
但是作为形参,可以这样写,void tab(int table[])

[【C语言】数组作为函数参数,指针。(部分内容摘自《c程序设计》谭浩强)](http://blog.sina.com.cn/s/blog_90832a850100wksp.html)
0 0
原创粉丝点击