区分函数中引用变量和指针的用法
1.定义整型a,b,分别输入他们的值,再交换之后输出。
输入:1 2 输出:a=2,b=1
错误1:输出为a=1,b=2,只是形参值改变
#include#include void swap(int p,int q) { int t; t=p; p=q; q=t; } int main() { int a,b; scanf("%d%d",&a,&b); swap(a,b); printf("a=%d,b=%d",a,b); return 0; }
错误2:输出为a=1,b=2,只是地址交换了,实参未改变
#include#include void swap(int *p,int *q) { int *t; t=p; p=q; q=t; } int main() { int a,b; scanf("%d%d",&a,&b); swap(a,b); printf("a=%d,b=%d\n",a,b); return 0; }
错误3:输出为a=2,b=2
#include#include void swap(int *p,int *q) { int *t; t=p; *p=*q; q=t; } int main() { int a,b; scanf("%d%d",&a,&b); swap(a,b); printf("a=%d,b=%d\n",a,b); return 0; }
正确1:直接对指针所指的值进行修改
#include#include void swap(int *p,int *q) { int t; t=*p; *p=*q; *q=t; } int main() { int a,b; scanf("%d%d",&a,&b); swap(a,b); printf("a=%d,b=%d\n",a,b); return 0; }
正确2:引用变量必须用c++
#include#include using namespace std; void swap(int &p,int &q) { int t; t=p; p=q; q=t; } int main() { int a,b; cin>>a>>b; swap(a,b); count<<"a="<
二分查找法(时间效率的问题)
举例:数组a中存放从小到大排好序的n个整数,查找给定值k在数组中下标;若查找失败,返回-1
//函数部分 int BitSearch(int a[],int n,int k) { int low=0,high=n-1,mid,found=0; while((low<=high)&&(found==0)) { mid=(low+high)/2; if(k>a[mid]) low=mid+1; else if(k==a[mid]) found=1; else high=mid-1; } if(found==1) return (mid); else return(-1); }
若n=15,此方法最多找四次(树的结构),而若一个一个数据对比需要找15次,对比之下,二分查找法时间效率会快很多。