C中 * 、*&、 **、& 区别,以及什么时候用

来源:互联网 发布:ubuntu arm版 编辑:程序博客网 时间:2024/05/22 06:44

使用示例:

void foo1(int * ptr){    *ptr = 1;    ptr = NULL;    //不会改变原指针所指向的对象}void foo2(int *& ptr){    *ptr = 2;//    ptr = NULL;   会改变原指针所指向的对象}void foo3(int** ptr){//    *ptr = 3;  指针不能这样直接赋值    **ptr = 3;//    *ptr = NULL;  会改变原指针所指向的对象}void foo4(int &e){    e = 5;}int main(){    int *t,a = 1;    int b = 2;    t = &a;    printf("t:%d\n",*t);    foo1(t);    printf("foo1:%d\n",*t);    foo2(t);    printf("foo2:%d\n",*t);    foo3(&t);    printf("foo3:%d\n",*t);    printf("\n");    printf(“b:%d\n",b);    foo4(b);    printf(“b:%d\n",b);    return 0;}

运行结果:t:1foo1:1foo2:2foo3:3b:2b:5

总结:

注意区分 指针所指向的对象指针所指向的对象的值,上面几个方法均可改变指针所指向的对象的值,但一定能改变指针所指向的对象(即不一定能改变指针箭头所指的方向)。

*

指针的变量,传入的只是地址值,不能改变原指针所指地址。只想改变所指对象值时使用。

**

指向指针的指针,纯C内容,功能和*&一样,使用较麻烦。

&

&是C++内容,表示引用,操作它即是在操作原对象,可看作传入对象的别名,先理解&再理解*&。这个和取地址不一样,概括为 和类型在一起的是引用,和变量在一起的是取址。

*&

*&表示指针的引用,操作它即是在操作原指针,可看作传入指针的别名。即可改变原指对象的值,又可改变原指针所指对象。

可扩展:C++中引用&与取地址&的区别分析

阅读全文
1 0