函数中的形参和实参
1)、形参出现在函数的定义中,在函数体内都可以使用,离开该函数则不能使用。
2)、实参出现在主函数中,进入被调函数后,实参也不能使用。
3)、实参变量对形参变量的时间传递是“值传递’',即单向传递,只由实参传递给形参,而不能由形参传回给实参。
4)、实参单元与形参单元是不同的单元。调用结束后,形参单元被释放,函数调用结束返回主调函数后则不能再使用该形参变量。实参单元仍保留并维持原值。在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
错误交换
#include<stdio.h>
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
}
int main()
{
int a=10;
int b=20;
swap(a,b);
printf("a=%d\nb=%d",a,b);
return 0;
}
输出结果:a=10
b=20
正确交换
#include<stdio.h>
void swap(int a,int b)
{
int temp=a;
a=b;
b=temp;
printf("a=%d\nb=%d",a,b);
}
int main()
{
int a=10;
int b=20;
swap(a,b);
return 0;
}
输出结果:a=20
b=10
**错误原因:**在swap函数中,传递的实参是a和b的副本,而不是原始的变量a和b。因此在调用swap函数后,在函数内部操作的只是这两个副本的值,而不会影响a和b原始的值。
字符串的比较
#include<stdio.h>
int my_strcmp(char ch1[],char ch2[])
{
int i=0;
while(ch1[i]==ch2[i])
{
\\判断是否到字符串结尾
if(ch1[i]=='\0')
{
return 0;
}
i++;
}
return ch1[i]>ch2[i]?1:-1;
}
int main()
{
\\比较两个字符串 如果相同返回0 如果不同返回1或-1
char ch1[]="hello";
char ch2[]="hallo";
\\返回值赋值给value来判断字符串是否相同8
int value=my_strcmp(ch1,ch2);
if(value==0)
{
printf("两个字符串相同");
}
else
{
printf("两个字符串不同");
}
return 0;
}
无参函数调用
如果是调用无参函数,则不能加上“实参”,**但括号不能省略
**
```c
```
\\函数定义
{
}
int main()
{
\\函数调用
test()\\正确,()不能省略
test(250)\\错误,函数定义时没有参数
return 0;
}
#include<stdio.h>
int fun()
{
printf("hello");
}
int main()
{
fun();
return 0;
}
输出结果:hello
冒泡排序函数版
#include<stdio.h>
void bubblesort(int arr[],int len)
{
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1-i;j++)
{
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
int main()
{
int arr[]={1,3,5,7,8};
bubblesort(arr,sizeof(arr)/sizeof(arr[0]));
\\sizeof(arr)/sizeof(arr[0])来获取数组的大小,即得到数组元素个数
for(int i=0;i<5;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
输出结果:1
3
5
7
8