创作不易,本篇文章如果帮助到了你,还请点赞支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
函数基本概念知识:函数的基本概念、含义、结构
目录
传递就是复制!!!
数组传入函数:
传递就是复制!!!
#include <stdio.h>
int add(int a, int b);
int main()
{
int a = 10,b = 20;
printf("%d\n",add(a,b));
return 0;
}
int add(int a,int b)
{
int sum=0;
sum=a+b;
return sum;
}
修改add函数中的a并不会改变main函数中的a:
当实参a传入add函数中,并不是a真正传入函数中,而是以复制的方式传给了add中的a
当传入地址时,复制的就是地址,传入基本类型数据时,复制的就是参数值
函数的数据传递:复制方式
基本类型:复制 数值
指针类型:复制 地址
数组传入函数:
一个传入数组求和的函数如下 :
#include <stdio.h>
int add_all(int a[]);
int main()
{
int arr[]={6,1,4,5,7};
printf("%d\n",add_all(arr));
return 0;
}
int add_all(int a[] ) //目的:传入数组 但是运行结果只有数组首位元素被传入
{
int sum=0;
int len=sizeof(a)/sizeof(a[0]);
int i;
for(i=0;i<len;i++)
{
sum+=a[i]; //结果为数组首位数据,不为期待的数组求和!
}
return sum;
}
结果为什么不是所期待的数组求和,而只输出了数组的首位数据?
原因是int add_all(int a[ ] ) 中传入函数的a[ ]并不是整个数组,而是数组第一位数据的地址!是指针类型:
传入的数组长度为1,只有数组首位元素6这一个数据。
如果想将整个数组传入函数中,就需要给定数组的长度len:
传入的a[ ] 仍然为数组第一位的地址,但是给定了len长度,数组第一位加上len长度的偏移,就可以遍历整个arr数组了。
具体实现如下:
#include <stdio.h>
int add(int a, int b);
int add_all(int a[],int len);
int main()
{
int arr[]={6,1,4,5,7};
printf("%d\n",add_all(arr,sizeof(arr) / sizeof(arr[0]) ) );
return 0;
}
int add_all(int a[],int len)
{
int sum=0;
int i;
for(i=0;i<len;i++)
{
sum+=a[i]; // *(a+i)
}
return sum;
}