1、如果自己定义的函数和库函数重名,自己定义的函数优先级更高。
2、函数中return 只能返回一个值。
3、最好不要在函数中循环调用,即递归调用,首先应当弄清逻辑关系。
4、调用方法:函数名(实参)。
5、特点:反复使用、独立代码。
6、引用:实参和形参是一个变量,可返回两个以上的结果,是最安全最便捷的方式。
7、函数形参可以没有,但是必须写小括号,形参数据类型需要一一说明。
8、传递方式:传数值(int x,int y)、传地址(int *x,int *y)、传引用(int &x,int &y)。传引用不分配新的空间,是实参变量的空间(同一个变量),省空间,和“swap(a,b);”连用。
9、传地址方式:指针变量。
10、&:在正常语句中起取地址的作用,在说明语句中起引用的作用。
11、指针变量:其内容为地址(存储位置)的变量,简称指针,它所指向的地址上存放的变量称作目标变量。
12、int *x;//int是目标变量的类型
13、指针变量:无符号32位整数。
14、在说明语句前加*:定义指针变量。
15、一个指针变量只能指向同一类型的变量。
16、int i;
int *i_point =&i;//&是取地址运算
*i_point=3;//*是取内容运算,取指向的目标对象的内容。
17、*p1=10;*p2=100;//*p1和*p2相当于变量名,和“swap(&a,&b);”连用。
18、在正常语句中,指针变量p1输出地址,*p1输出变量值。
19、绝对不能对未赋值的指针做取内容运算。
20、数组名本身就是数组的首地址。
21、++(--)指向下一个(或上一个)同种类型的数据。
22、传地址:把实参地址给形参。
23、若主函数和函数中都定义了a,b变量,这两组变量不是同一变量。
24、int *p;//定义指针变量
int &x=y;//&x相当于变量,把y的值赋给x
p=&x;//指针p指向x的地址
y=*p;//把p指向的内容赋给y
25、指向数组元素的指针:
int a[10],*p;
p=&a[0];//数组第一个元素的地址
p=a;//p是指针变量,a是指针常量
*p=1等同于a[0]=1//通过指针变量为数组元素赋值
26、c++规定:p++指向数组元素的下一个元素而不是下一个字节
27、*(p+1)=2等同于a[1]=2
*(a+1)=2等同于a[1]=2
*(a+1)与a[1]等同
28、重点:*(a+i)等同于a[i]。
29、自加自减运算的优先级最高。
30、*(p+i)等同于p(i)。
31、p+i或a+i均表示a[i]的地址&a[i]。
32、指针p可以改变,a指向数组首地址,是指针常量,不可赋值不可改变。
33、*++p=2;等同于*(p=p+1;*p=2;p=2004H)
*++a=2是错误的,理由见32条。
34、指针应用:
(一)用指向数组的指针变量输出数组的全部元素
int main()
{int a[10],i;
int *p;
for(i=0;i<10;i++)
cin>>a[i];
for(p=a;p<a+10;p++)
cout<<*p<<'\t';}
(二)用指向数组的指针变量输出数组的全部元素
int main()
{int a[10],i;
int *p=a;
for(i=0;i<10;i++)
cin>>a[i];
for(i=0;i<10;i++)
cout<<*p++<<endl;}
(三)
int main()
{int x[]={1,2,3};
int s,i,*p;
s=1;p=x;
for(i=0;i<3;i++)
s*=*(p+i);
cout<<s<<endl;}
35、用指针变量作函数参数(形参)接收数组地址(实参)
数组名代表数组首元素的地址
用数组名做函数的参数,传递的是数组首元素的地址
用指针变量做函数的形参,同样可以接收从实参传递来的数组首元素的地址(此时实参是数组名)
例1
形参实参都用数组名
int main() f(int arr[],int n)//形参数组,必须进行类型说明
{int array[10]; {.........}
.........
f(array,10);//实参数组
......
}
用数组名作形参,因为接收的是地址,所以可以不指定具体的元素的个数
例2
实参用数组名,形参用指针变量
int main() f(int *x,int n)//形参指针
{int a[10]; {......}
......
f(a,10);
......
}
例3
用指针逆序输出
void inv(int *x,int n)
{int *p,t,*i,*j,m=(n-1)/2;
i=x,j=x+n-1,p=x+m;
for(;i<=p;i++,j--)
{t=*i,*i=*j,*j=t;}
}
int main()//用指针变量来接收地址
{int i,a[10]={3,7,9,11,0,6,7,5,4,2};
inv(a,10);
for(i=0;i<10;i++)
cout<<a[i]<<'\t';
return 0;
}
例4
形参实参都用指针变量
int main() f(int *x,int n)//形参指针
{int a[10],*p; {......}
p=a;
.....
f(p,10);//实参指针
......
}//实参指针调用前必须赋值
例5
实参为指针变量,形参为数组名
int main() f(int x[],int n)//形参数组
{int a[10],*p; {......}
p=a;
......
f(p,10);//实参指针
......}