四时宝库

程序员的知识宝库

C/C++小知识:函数中数组是如何传递的

一般在C、C++中,数组作为函数传递的方式一般有两种传递方法,一种是function(int a[]); 另一种是function(int *a),为了使函数更加通用,一般还要在后面加上数组的长度,即:function(int a[],int num)和function(int *a,int num)。下面直接看看两种传递的结果。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

void Array(int a[],int num)

{

int num1;

num1=sizeof(a)/sizeof(a[0]);

printf("原来数组的长度是%d\n",num);

printf("第一种方法传递数组的长度是%d\n",num1);

}

void Array1(int *a,int num)

{

int num1;

num1=sizeof(a)/sizeof(a[0]);

printf("原来数组的长度是%d\n",num);

printf("第二种方法传递数组的长度是%d\n",num1);

}

int main()

{

int num;

int a[]={27,39,14,5,26,54,33,445,223};

num=sizeof(a)/sizeof(a[0]);

Array(a,num);

Array1(a,num);

system("pause");

return 0;

}

原因是为了迅速的计算数组,仅仅把数组的内存首地址作为传递变量,节约了许多缓存。而且其实单独的数组名代表的也是数组的内存首地址。

那么意思是数组也可以用指针的形式来表达,指针一样可以表达数组。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

void Array(int *a,int num)

{

int num1;

num1=sizeof(a)/sizeof(a[0]);

printf("原数组形式表达 a[3]=%d\n\n",a[3]);

printf("指针表达方式1 *(a+3)=%d\n\n",*(a+3));

printf("指针表达方式2 *a+3=%d\n\n",*a+3);

}

int main()

{

int num;

int a[]={1,2,3,4,5,6,7};

num=sizeof(a)/sizeof(a[0]);

Array(a,num);

system("pause");

return 0;

}

我们发现a[3] 、*a+3与*(a+3)都是一样的效果。但是本质不一样,a[3]与*(a+3)都是对地址增加了三个整型数据字节的地址单元,从而得到a[3]的地址,从而取值。而*a+3是对a的首地址取值后等于1,然后加3等于4.是对整数进行操作。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接