在C语言中,数组作为参数,是怎样在函数之间传递?

在C语言中,数组作为参数,是怎样在函数之间传递?,第1张

很简单的,数组作为函数参数传递的时候只要是数组名就可以了,因为数组名本身就是数组的首地址 给个程序看看

#include<stdioh>

#define N 3

int array[N][N];

void main()

{

//在主函数内声明被调函数

void convert(int array[][3]);

int i,j;

printf("输入数组:\n");

for(j=0;j<N;j++)

for(i=0;i<N;i++)

scanf("%d",&array[i][j]);

printf("\n");

for(j=0;j<N;j++)

{

for(i=0;i<N;i++)

printf("%d\t",array[i][j]);

printf("\n");

}

//调用矩阵转置函数

convert(array);

printf("\n");

for(i=0;i<N;i++)

{

for(j=0;j<N;j++)

printf("%d\t",array[i][j]);

printf("\n");

}

}

void convert(int array[][3])

{

int i,j,t;

for(i=0;i<N;i++)

for(j=0;j<N;j++)//设置数组中转置矩阵元素交换

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

}

}

struct Student st;

void function(struct Student st);这种形式就是传递地址;

void fuction2(struct Student pst);这种形式就是传递结构体的地址;

调用这两个函数的形式如下:

function(st);

fuction2(&st);

一般推荐第二种方式,因为第一种方式需要传递整个结构体,需要开辟sizeof(struct student)这么大的内存空间,开销太大,第二种方式则只需要开辟四个字节的内存,用来存放地址;

你这是

参数传递

进去的其实是数组的地址,在函数内部修改了以后,数组的内容就已经真正的修改了,所以函数返回以后,继续访问这个数组,得到的数据就是修改以后的。

比如:

int array[12][12];

copy_arcs(arrar)

在访问array就是修改后的数据了

C语言传递的是值而不是地址,这一点从VB转过来的程序员一定要注意。否则不经意间就会犯错误。另外下层函数修改上层函数变量不是一种好习惯,容易引发错误。C语言中函数可以返回一个函数值,如果你需要返回多个函数值可以用下面的形式\x0d\\x0d\fun(int a, int b)\x0d\{ a=1;b=2;}\x0d\main()\x0d\{ int a, b;\x0d\fun(&a,&b) a,b的值被改变\x0d\}\x0d\\x0d\如果按VB的习惯,\x0d\fun(int a, int b)\x0d\{ a=1;b=2;}\x0d\main()\x0d\{ int a, b;\x0d\fun(a,b);a、b的值没有改变\x0d\}\x0d\是错误的,main中的a,b和fun中的a,b完全是两码事,结果就是调运fun没有任何效果。

不可能按值传递的,设想一下

type

arr

=。。。。。

sizeof(arr)为100万了字节,如果按照值传递,就要创建一个临时变量temp也为100万个字节,效率岂不是太低了。再可能arr是堆内存,参数传递是要属性相同,值相同,难道系统自行去new一段内存,这该用户去释放

还是系统自动回收呢?

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/12460592.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存