美文网首页
c指针和引用和函数指针

c指针和引用和函数指针

作者: 黑小柴 | 来源:发表于2019-05-21 14:06 被阅读0次

引用:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

int main(){
   int a = 1;
   int& b = a;// 引用一个引用变量,别名的别名
   cout<<"a:address->" <<&a<< endl;
   cout<<"b:address->" <<&b<< endl;
   a = 2;
   cout<<a<<endl;
   b = 3;
   cout<<a<<endl;
   int& c = b;
   cout<<a<<endl;
   c = 4;
   cout<<a<<endl;
}
结果
a:address->0x7ffeefbe675c
b:address->0x7ffeefbe675c
2
3
3
4

指针传参

void change(int *a,int *c,int *e){
    printf("%p\n",a);
    printf("%p\n",c);
    printf("%p\n",e);
    int *b =a;
    *b=3;
    int *d;
    d=c;
    *d=4;
    *e=5;
}

int main(){
    int i=0,j=0,k=0;
    change(&i,&j,&k);
    printf("i=%d,j=%d,k=%d\n",i,j,k);
    return 0;
}

结果
0x7ffe057626fc
0x7ffe05762700
0x7ffe05762704
i=3,j=4,k=5

引用传参

void change(int &a, int &b,int &c){
   printf("%p\n",&a);
   printf("%p\n",&b);
   printf("%p\n",&c);
   a=3;
   b=4;
   c=5;
}

int main(){
    int i=0,j=0,k=0;
    change(i,j,k);
    printf("i=%d,j=%d,k=%d\n",i,j,k);
    return 0;
}
结果
0x7ffeeb281758
0x7ffeeb281754
0x7ffeeb281750
i=3,j=4,k=5

函数指针

int max(int x, int y)
{
    return x > y ? x : y;
}
 
int main(void)
{
    /* p 是函数指针 */
    int (* p)(int, int) = & max; // &可以省略
    int a, b, c, d;
 
    printf("请输入三个数字:");
    scanf("%d %d %d", & a, & b, & c);
 
    /* 与直接调用函数等价,d = max(max(a, b), c) */
    d = p(p(a, b), c); 
 
    printf("最大的数字是: %d\n", d);
 
    return 0;
}
// 回调函数
void populate_array(int *array, size_t arraySize, int (*getNextValue)(void))
{
    for (size_t i=0; i<arraySize; i++)
        array[i] = getNextValue();
}
 
// 获取随机值
int getNextRandomValue(void)
{
    return rand();
}
 
int main(void)
{
    int myarray[10];
    populate_array(myarray, 10, getNextRandomValue);
    for(int i = 0; i < 10; i++) {
        printf("%d ", myarray[i]);
    }
    printf("\n");
    return 0;
}
1.【值传递】如果形参为非引用的传值方式,则生成局部临时变量接收实参的值
值传递的方式无法实现交换,因为传参时对于参数left和right拷贝一临时副本,交换的是副本值,因为其是临时变量函数退出,变量销毁,并不会影响外部left和right的值。
void Swap (int left, int right)
     int temp = left;
     left = right ;
     right = temp ;
}
 
2.【引用传递】如果形参为引用类型,则形参是实参的别名。
使用引用的话,不做临时拷贝,&的使用说明此处只是原参数的另一个名字而已,所以修改时直接在原参数的基础上修改变量值,减少了复制的开销,加快程序执行效率。
void Swap (int& left, int& right)
{
     int temp = left;
     right = left ;
     left = temp ;
}
 
3.【指针传递】
传入的是地址,因为地址是唯一的,所以指针通过地址的访问进而可修改其内容。
void Swap (int* pLeft, int* pRight)
{
     int temp = *pLeft;
     *pLeft = *pRight;
     *pRight = temp;
}

相关文章

  • c指针和引用和函数指针

    引用:引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 指针传参 引用传参 函数指针

  • C语言函数指针和指针函数

    C语言函数指针和指针函数 在学习C语言的过程中,“指针函数”和“函数指针”经常容易搞混了, 最简单的辨别方式就是看...

  • C语言 - 中

    总目录 前言 本文介绍C语言的指针:一、指针介绍二、指针使用三、数组指针和指针数组 函数指针和指针函数 环境 1...

  • 读书笔记17.06.02【stack】【vector】

    C++中参数传递:按值传递,指针传递和引用传递按值传递:形参是实参的拷贝。指针传递:拷贝指针,被调用函数对指针指向...

  • C++基础

    C++ 值传递、指针传递、引用传递详解C++中引用传递与指针传递区别 引用传递和指针传递的区别 引用的规则:(1)...

  • C语言

    C 指针、指针变量、函数指针、指针函数、指针数组、数组指针、C 数组

  • C语言指针导学(4)——分清函数指针和指针函数(转载)

    C语言指针导学(4)——分清函数指针和指针函数 http://blog.csdn.net/porscheyin/a...

  • 指针和引用的辨析

    先来看两个图 指针与引用的区别 1.指针在C和C++中均有,而引用是C++独有的特性(*指针申明符号,&引用申明符...

  • 学习笔记3(指针运算,函数参数与指针,数组指针,二级指针)

    一、指针运算 二、数组与指针 三、指针和函数参数 java中: C/C++中: 四、指针数组 五、 二级指针 六、...

  • C++函数指针和Swift的函数对象

    C++函数指针和Swift的函数对象 在C++中学习函数指针式非常痛苦的事情,而在Swift里面学习函数指针则是非...

网友评论

      本文标题:c指针和引用和函数指针

      本文链接:https://www.haomeiwen.com/subject/lgqiiqtx.html