函数及指针总结

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);//实参指针

......}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Famiglistimott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值