• C语言--指针与数组--遍历数组的n种方式【详细】



     一.一维数组名的含义

    arr一般表示数组的其实地址除了两种例外)

    1.在定义数组的同一个函数中(不是形参),求sizeof(arr),求整个数组的字节数
    2.在定义数组的同一个函数中(不是形参),&arr+1,加整个数组的大小 (经常考试)
    3.除上面以外,arr都表示数组的起始地址(首元素的地址)


     二.指针与数组的互换

    上文提到过:arr表示数组的首元素地址,由于如此,数组就和指针扯上了关系

       int *p = arr;有如下互换的情况成立
      *(p+i)==p[i];
      *(arr+i) == arr[i];
       一般建议,尽量使用下标,因为*容易漏掉

     所以有时候,程序中的数组形式其实是个指针,有时候的指针其实想要表达数组,我们只要通过上面的公式转回原来的意思。比如p[i]转换为数组就是arr[i]。

    下面的程序表达的都是元素4

    1. int main()
    2. {
    3. int arr[5] = { 1,2,3,4,5 };
    4. int* p = &arr[0]; //定义一个指针变量保存数组的首元素地址
    5. int* p1 = arr;//定义一个指针变量保存数组的首元素地址
    6. // p===arr 两者可以互换
    7. printf("%d\n", arr[3]);
    8. printf("%d\n", p[3]);
    9. printf("%d\n", *(p + 3));
    10. printf("%d\n", *(arr + 3));
    11. return 0;
    12. }


    三.遍历数组的n种方式

    有两大思路:

    1.下标移动

    2.指针移动 

     方法一:

     方法二:

    方法三:

     方法四:

     方法五:

    方法六:

     

    1. //第一种写法:通过下标遍历数组
    2. int main()
    3. {
    4. int arr[5] = { 1,2,3,4,5 };
    5. int sz = sizeof(arr) / sizeof(arr[0]);
    6. for (int i = 0;i < sz;i++)
    7. {
    8. printf("%d ", arr[i]);
    9. }
    10. }
    11. //第二种写法:通过指针遍历数组
    12. int main()
    13. {
    14. int arr[5] = { 1,2,3,4,5 };
    15. int sz = sizeof(arr) / sizeof(arr[0]);
    16. int* p = arr;
    17. for (int i = 0;i < sz;i++)
    18. {
    19. printf("%d ", *p); //不推荐
    20. p++;
    21. }
    22. }
    23. //第三种写法:通过指针遍历数组
    24. int main()
    25. {
    26. int arr[5] = { 1,2,3,4,5 };
    27. int sz = sizeof(arr) / sizeof(arr[0]);
    28. int* p = arr;
    29. for (int i = 0;i < sz;i++)
    30. {
    31. printf("%d ", *(p+i)); //指针本身不动,i在动
    32. }
    33. }
    34. //第四种写法:
    35. int main()
    36. {
    37. int arr[5] = { 1,2,3,4,5 };
    38. int sz = sizeof(arr) / sizeof(arr[0]);
    39. int* p = arr;
    40. for (int i = 0;i < sz;i++)
    41. {
    42. printf("%d ", p[i]); //p[i]==arr[i],指针有时候可以和数组互换,把它转换为数组
    43. }
    44. }
    45. //第五种写法:
    46. int main()
    47. {
    48. int arr[5] = { 1,2,3,4,5 };
    49. int sz = sizeof(arr) / sizeof(arr[0]);
    50. int* p = arr;
    51. for (int i = 0;i < sz;i++)
    52. {
    53. printf("%d ", *(arr+i)); //*(p+i)==*(arr+i)==p[i]==arr[i]
    54. }
    55. }
    56. //第六种写法:
    57. int main()
    58. {
    59. int arr[5] = { 1,2,3,4,5 };
    60. int sz = sizeof(arr) / sizeof(arr[0]);
    61. for (int* p = &arr[0];p < &arr[sz];p++) //通过指针移动
    62. {
    63. printf("%d ", *p);
    64. }
    65. }

     创作不易, 如果这份博客👍对你有帮助,可以给博主一个免费的点赞以示鼓励。
    欢迎各位帅哥美女点赞👍评论⭐收藏,谢谢!!!
    如果有什么疑问或不同的见解,欢迎在评论区留言哦👀。
    祝各位生活愉快⭐

  • 相关阅读:
    08.爱芳地产项目小程序全栈项目经验(已上线)
    OpenResty的文件IO操作
    Kotlin高仿微信-第53篇-添加好友
    AntBlazor Theme in ABP Framework
    【蓝桥杯单片机】六、 PCF8591- DAC和DAC
    一款php开发的非常好的OA办公管理系统源码
    Android Studio 实现登录注册-源代码 (连接MySql数据库)
    帮公司面试了个要25K的测试,我问了他这些问题...
    java高手进阶之:消息模板
    anroid html5 拍照扫码
  • 原文地址:https://blog.csdn.net/m0_75266675/article/details/134402353