• 引用与指针及数组指针与指针数组的区别实践


    实践出真知,看代码(注释记录)最好理解

    1. #include
    2. #include
    3. using namespace std;
    4. // 引用是变量的别名,指针指向变量存放变量的地址
    5. void test0(void){
    6. int b = 20;
    7. int* x = &b;//此处&是取地址符
    8. int&c = b; //此处&为象征意义,表示c也是引用
    9. int d = 88;
    10. c = d;
    11. cout << "test0: b: " << b << endl;
    12. cout << "test0: c: " << c << endl;
    13. cout << "test0: &c: " << &c << endl;
    14. cout << "test0: x: " << x << endl;
    15. cout << "test0: *&c: " << *&c << endl;
    16. }
    17. // 指针数组实际是数组,每个元素存放的是指针
    18. void test1(void) {
    19. int x = 600;
    20. int y = 800;
    21. int *p[2]; //定义一个指针数组
    22. p[0] = &x;
    23. p[1] = &y;
    24. printf("test1:%p\n",p[0]); //x的地址
    25. printf("test1:%p\n",&x); //x的地址
    26. printf("test1:%d\n",*p[0]);//x的值
    27. }
    28. // 数组指针是指向数组的指针,存放的是数组的地址,也是数组首元素的地址
    29. void test2(void) {
    30. int arrP[6] = {0,1,2,3,4,5}; //定义一个数组并赋值
    31. int (*p)[6] = &arrP; //定义一个数组指针并为其赋值,可试int(*p)[5]=&arrP:cannot convert ‘int (*)[6]’ to ‘int (*)[5]’ in initialization
    32. printf("test2:%p\n",arrP); //数组名为数组首元素的地址 与 &arrP[0] 等价
    33. printf("test2:%p\n",p); //p为arrP的地址 及 &arrP,注意:虽然arrP与&arrP值相同,单代表的意思却不一样,类型却不同。arrP代表首元素的地址,&arrP代表数组的地址。
    34. printf("test2:%p\n",*p); //*p代表arrP,所以这个表示arrP首元素的地址
    35. printf("test2:%d\n",**p); //既然*p代表首元素的地址,**p为求这个地址上的值
    36. printf("test2:%d\n",(*p)[2]);//*p为arrP,所以(*p)[2]就是arrP[2]的值
    37. printf("test2:%d\n",*p[3]); // 输出的正负整数是何意思
    38. }
    39. int main(){
    40. test0();
    41. test1();
    42. test2();
    43. return 0;
    44. }

    相应输出:

    test0: b: 88

    test0: c: 88

    test0: &c: 0x7ffc89c04f08

    test0: x: 0x7ffc89c04f08

    test0: *&c: 88

    test1:0x7ffc89c04f2c

    test1:0x7ffc89c04f2c

    test1:600

    test2:0x7ffc89c04f10

    test2:0x7ffc89c04f10

    test2:0x7ffc89c04f10

    test2:0

    test2:2

    test2:-1983885272  (每次运行都会变化)

  • 相关阅读:
    JavaScript扫盲及DOM的特点
    整理了27个Python人工智能库,建议收藏~
    H5关闭当前页面,包括微信浏览器
    Linux:丢包检查工具,dropwatch
    JDBC快速入门及API详解&MySQL学习
    程序员必须知道的八件事
    数仓4.0(可视化报表)
    突然发现柚子租车v1.42的小程序后端代码竟然内核文件全加密了!记录我的解密过程
    Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用
    MySQL 按条件查询 2022/09/05
  • 原文地址:https://blog.csdn.net/zl378837964/article/details/132833625