
很简单的,数组作为函数参数传递的时候只要是数组名就可以了,因为数组名本身就是数组的首地址 给个程序看看
#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一段内存,这该用户去释放
还是系统自动回收呢?
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)