• C语言指针的介绍


    零.导言

            在日常生活中,我们常常在外出时居住酒店,细心的你一定能发现酒店不同的房间上有着不同的门牌号,上面写着像308,512之类的数字。当你定了酒店之后,你就会拿到一个写有门牌号的钥匙,凭着钥匙就能进入对应的房间。其实指针就和钥匙一样,能指向对应的空间。

    1d01240f9d6749f9884261e3ea050c0e.png2dc9f54accda4534a4d97488b1149c6b.png


    一.什么是指针?

            1.就像导言里说的,指针就是指向一块特定空间的钥匙。在学习C语言的过程中,我们得知了数据存储是要空间的,而指针就可以指向这块空间以供我们修改里面的数据。

            就像指定的钥匙能打开指定的房门一样,我们可以创建指针类型的变量并赋值:

    1. int a = 12;
    2. int * pa = &a;

            像图中这样操作就把 a 的地址赋给了指针变量 pa。

            其中 & 是取地址操作符,pa 的类型为 int* ,可以储存地址。


    二.指针有哪些类型?

            1,有 int*,char*,int(*)[],int(*)(),void* 等等。

            它们分别是:整形指针,字符指针,数组指针,函数指针,无类型指针

            2,还有结构体类型与其他各种各样的类型,不过基本上诉类型最为常见。


    三.指针要如何使用?

    1. int a = 12;
    2. char c = 'c';
    3. int arr[3] = {1,2,3};
    4. int sum(int x,int y)
    5. {
    6. return x + y;
    7. }
    8. int* pa = &a;
    9. char* pc = &c;
    10. int(*parr)[3] = arr;
    11. int(*psum)(int x,int y) = sum;
    12. void* p = NULL;

            它们的使用方法如上图所示;以* pa为例,* pa a 在此处完全等价,改变其中任意一方的值,另一方也会改变。


    四.指针使用的意义

            1.指针可以让我们以传址的方式将地址传到函数里,这样就能与函数同步的改变变量,不会出现形参改变而实参不变的尴尬情况。

            2.指针能极大的简化我们的代码,运用得当能达到事半功倍的效果,如转移表:

    1. #define _CRT_SECURE_NO_WARNINGS 1
    2. #include
    3. int add(int x, int y)
    4. {
    5. return x + y;
    6. }
    7. int sub(int x, int y)
    8. {
    9. return x - y;
    10. }
    11. int mul(int x, int y)
    12. {
    13. return x * y;
    14. }
    15. int div(int x, int y)
    16. {
    17. return x / y;
    18. }
    19. void menu()
    20. {
    21. printf("* * * * * * * * * * * * * *\n");
    22. printf("* * 1.add 2.sub * *\n");
    23. printf("* * 3.mul 4.div * *\n");
    24. printf("* * 0.exit * *\n");
    25. printf("* * * * * * * * * * * * * *\n");
    26. printf("请输入值:>");
    27. }
    28. int main()
    29. {
    30. int input = 0;
    31. int ret = 0;
    32. int(*p[5])(int x, int y) = { 0,add,sub,mul,div };
    33. do
    34. {
    35. menu();
    36. scanf("%d", &input);
    37. if (input < 5 && input > 0)
    38. {
    39. int x, y;
    40. printf("请输入操作数:>");
    41. scanf("%d %d", &x, &y);
    42. ret = (*p[input])(x, y);
    43. printf("%d\n", ret);
    44. }
    45. else if (input == 0)
    46. {
    47. printf("退出程序\n");
    48. }
    49. else
    50. {
    51. printf("输入错误,请重新输入:>");
    52. }
    53. }while (input);
    54. return 0;
    55. }

            得当的使用函数使代码明显简短了许多。

            3.使用指针还能加深我们对数据存储的理解,帮助我们更好地学习C语言。


    五.数组指针的相关链接

            多维数组的深入理解-CSDN博客

            数组指针的相关知识-CSDN博客


  • 相关阅读:
    前端效果ᅳ1、react实现时间上下轮播特效
    节点异常检测 node-problem-detector
    MATLAB GUI录音信号的时域和频域分析
    动手吧,vue做个好看的按钮01
    Aocoda-RC F405V2 FC(STM32F405RGT6 v.s. AT32F435RGT7) IO Definitions
    python+vue+elementui在线打印系统
    R 笔记 MICE
    Linux hook 技术一个简单demo分析
    Beyond Compare 4 30天评估到期 解决方法
    类和对象(1)
  • 原文地址:https://blog.csdn.net/bitenum/article/details/143315717