找回密码
 立即注册
首页 业界区 安全 准备工作之指针与数组[基于郝斌课程]

准备工作之指针与数组[基于郝斌课程]

狭踝仇 昨天 21:19
数据结构概述
定义:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法。
数据结构 = 个体 + 个体的关系
算法 = 对存储数据的操作
算法
解题的方法和步骤
衡量算法的标准
1、时间复杂度
大概程序要执行的次数,而非执行的时间
2、空间复杂度
算法执行过程中大概所占用的最大内存
3、难易程度
4、健壮性
数据结构的地位
数据结构是软件中最核心的课程
程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言
指针
指针的重要性
指针是C语言的灵魂
定义:
地址:内存单元的编号,从0开始的非负整数
指针:指针就是地址,地址就是指针
指针变量:是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数
分类:
基本类型的指针
指针和数组的关系
  1. /*
  2. @file      main.c
  3. @brief     数据结构预备知识之指针学习
  4. @author    EricsT (EricsT@163.com)
  5. @version   v1.0.0
  6. @date      2025-09-17
  7. @history   2025-09-17 EricsT - 新建文件
  8. */
  9. #include <stdio.h>
  10. //int main(void)
  11. //{
  12. //        int* p;
  13. //        int i = 10;
  14. //        int j;
  15. //
  16. //        /*该程序错误
  17. //        由于p保存一个变量地址
  18. //        但是其在定义时未进行初始化
  19. //        故无法知晓它保存的是哪一个变量的地址
  20. //        *p是变量地址的值,故也无法知晓,所以此处编译错误*/
  21. //        j = *p;
  22. //        printf("%d\n", j);
  23. //
  24. //        return 0;
  25. //}
  26. //int main(void)
  27. //{
  28. //        /*
  29. //        * p是一个变量的名字,
  30. //        * int*表示该p变量只能存放int型变量的地址
  31. //  * 不能存放实数
  32. //        */
  33. //        int* p;
  34. //        int i = 10;
  35. //
  36. //        char ch = 'A';
  37. //
  38. //        /*
  39. //        * 该程序错误,
  40. //        * ch是一个char型变量
  41. //        * 但是p是一个int*型指针,只能存放int型变量的地址,无法存放其他类型变量的地址
  42. //        * 故此处编译错误
  43. //        */
  44. //        p = &ch;
  45. //
  46. //        return 0;
  47. //}
  48. //int main(void)
  49. //{
  50. //        /*
  51. //        * p是一个变量的名字,
  52. //        * int*表示该p变量只能存放int型变量的地址
  53. //        * 不能存放实数
  54. //        */
  55. //        int* p;
  56. //
  57. //        /*
  58. //        * 该程序错误
  59. //        * 10是一个实数,不是一个地址
  60. //        * 故此处编译错误
  61. //        */
  62. //        p = 10;
  63. //
  64. //        return 0;
  65. //}
  66. //int main(void)
  67. //{
  68. //        /*
  69. //        * p是一个变量的名字,
  70. //        * int*表示该p变量只能存放int型变量的地址
  71. //        * 不能存放实数
  72. //        */
  73. //        int* p;
  74. //        int i = 10;
  75. //
  76. //        *p = i;//此处错误,p未进行初始化,属于野指针
  77. //
  78. //        printf("i = %d,*p = %d", i, *p);
  79. //
  80. //
  81. //        return 0;
  82. //}
  83. int main(void)
  84. {
  85.         /*
  86.         * p是一个变量的名字,
  87.         * int*表示该p变量只能存放int型变量的地址
  88.         * 不能存放实数
  89.         */
  90.         int* p;
  91.         int i = 10;
  92.         int j;
  93.         /*
  94.         i的值改变,p的值不会变
  95.         p的值改变,i的值不会变
  96.         *p就是i,i的值变了,则*p的值也会发生改变
  97.         */
  98.         p = &i;
  99.         j = *p;//等价于 j = i
  100.         printf("i = %d, j = %d, *p = %d", i, j, *p);
  101.         return 0;
  102. }
复制代码
  1. /*
  2. @file      main.c
  3. @brief     数据结构预备知识之指针与函数学习
  4. @author    EricsT (EricsT@163.com)
  5. @version   v1.0.0
  6. @date      2025-09-17
  7. @history   2025-09-17 EricsT - 新建文件
  8. */
  9. #include <stdio.h>
  10. //void f(int i)
  11. //{
  12. //        i = 100;
  13. //}
  14. //
  15. //int main(void)
  16. //{
  17. //        int i = 9;
  18. //        f(i);
  19. //        printf("i = %d\n", i);//此时i = 9
  20. //
  21. //        return 0;
  22. //}
  23. void f(int* ptr)//ptr接收地址
  24. {
  25.         *ptr = 100;//f(i)时,*ptr就相当于i
  26. }
  27. int main(void)
  28. {
  29.         int i = 9;
  30.         f(&i);
  31.         printf("i = %d\n", i);//此时i = 100
  32.         return 0;
  33. }
复制代码
  1. /*
  2. @file      main.c
  3. @brief     数据结构预备知识之指针与数组学习
  4. @author    EricsT (EricsT@163.com)
  5. @version   v1.0.0
  6. @date      2025-09-17
  7. @history   2025-09-17 EricsT - 新建文件
  8. */
  9. #include <stdio.h>
  10. int main(void)
  11. {
  12.         int a[5] = { 1, 2, 3, 9, 5 };//a存放的是该数组首元素即a[0]
  13.         //3[a]、a[3]、*(a + 3)、*(3 + a)是等价的
  14.         printf("3[a] = %d\n", 3[a]);
  15.         printf("a[3] = %d\n", a[3]);
  16.         printf("*(a + 3) = %d\n", *(a + 3));
  17.         printf("*(3 + a) = %d\n", *(3 + a));
  18.         //数组内元素的地址是连续的
  19.         printf("P_a = %p\n", a);
  20.         printf("P_(a + 1) = %p\n", a + 1);
  21.         printf("P_(a + 2) = %p\n", a + 2);
  22.         printf("p_(a + 3) = %p\n", a + 3);
  23.         return 0;
  24. }
复制代码
  1. /*
  2. @file      main.c
  3. @brief     数据结构预备知识之指针与数组与函数学习
  4. @author    EricsT (EricsT@163.com)
  5. @version   v1.0.0
  6. @date      2025-09-17
  7. @history   2025-09-17 EricsT - 新建文件
  8. */
  9. #include <stdio.h>
  10. void Show_Array(int* ptr, int iNum)
  11. {
  12.         ptr[0] = -1;
  13.         for (int i = 0; i < iNum; ++i)
  14.                 printf("%d\n", *(ptr + i));
  15. }
  16. int main(void)
  17. {
  18.         int a[5] = { 1, 2, 3, 5, 4 };
  19.         Show_Array(a, 5);
  20.         printf("\n\n\n");
  21.         printf("%d", a[0]);
  22.         return 0;
  23. }
复制代码
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册