函数function
先来康康函数的定义
——From Wikipedia, the free encyclopedia
在c语言中,函数分为库函数和自定义函数
库函数:
——图片来自百度
——图片来自课堂视频
/*拷贝字符串*/
//用include添加库函数
//选中库函数右击可打开.h函数
int main()
{
char arr1[]="hello";
char arr2[20]="###########";
strcpy(arr2, arr1);//把arr1拷贝至arr2
//strcpy—string copy—字符串拷贝
printf("%s\n",arr2);//结果为hello
return 0;
}
//用include添加库函数
int main()
{
char arr[]="hello";
memset(arr,'*',2);//用*替换hello前2个字符
printf("%s\n",arr);//结果为**llo
return 0;
}
/*利用函数进行值的互换*/
//介是错误的~~~示范~
//用include添加库函数
void Swap(int pa,int pb)
{
int tmp;
tmp = pa;
pa = pb;
pb = tmp;
}
int main()
{
int a=10;
int b=20;
printf("a=%d b=%d\n",a,b);
Swap(a,b);
//a b作为实参传递给n1,n2,n1和n2实现了互换,
//但是值的传递是单向的,
//n1和n2的值并不能返回到实参a,b中,因此a,b还是原先的值
printf("swapped a=%d b=%d",a,b);
return 0;
}
//介是错误的~~~
/*利用函数进行值的互换*/
//介是正确哒!
//用include添加库函数
void Swap(int *pa,int *pb)
{
int tmp;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a=10;
int b=20;
printf("a=%d b=%d\n",a,b);
Swap(&a,&b);
//a b作为实参传递给指针变量n1,n2。n1和n2称为指向a,b的指针。
//*n1和*n2为a,b的别名,对*n1和*n2的修改,相当于对a,b的修改
printf("swapped a=%d b=%d",a,b);
//结果a=20,b=10
return 0;
}
/*用函数找到有序数组中的某个数*/
int binary_search(int arr[],int k,int sz)//本质上arr是一个指针
{
//二分查找
int left=0;
int right=sz-1;
while(left<=right)
{
int mid=(left+right)/2;//中间元素的下标
if(arr[mid]<k)
left=mid+1;
else if(arr[mid]>k)
right=mid-1;
else
return mid;//找到了就返回这个数
}
return -1;//找不到就返回-1
}
int main()
{
int arr[]={0,1,2,3,4,5,6,7,8,9};
int k=7;
int sz=sizeof(arr)/sizeof(arr[0]);
int ret = binary_search(arr,k,sz);
//传递过去的实际上是arr数组首元素的地址
//所以如果在binary_search中计算ret,所得结果为sz=1,不能正确计算
if(ret ==-1)
printf("找不到指定的数字\n");
else
printf("找到了,下标是:%d\n",ret);
}
/*实现每次调用num值会加1*/
void ADD(int* p)
{
(*p)++;//*p++的优先级比较高,会优先作用于p,没有用。
}
int main()
{
int num=0;
ADD(&num);
printf("num=%d\n",num);//打印结果1
ADD(&num);
printf("num=%d\n",num);//打印结果2
ADD(&num);
printf("num=%d\n",num);//打印结果3
}
函数的嵌套访问和链式调用
嵌套调用就是某个函数调用另外一个函数
链式调用就是把一个函数的返回值作为另一个函数的参数
/*函数的嵌套使用*/
int main()
{
printf("%d\n",printf("%d",printf("%d",43)));//打印结果1
return 0;
}
//打印结果4321,嵌套打印字符个数