首页 > 代码库 > 指针简述

指针简述

  1. 间接访问:通过内存单元编号((地址),以及数据所占字节数访问内存中的数据.  

  2. 主要内容:指针变量指针与数组,指针与字符串  

  3. 数据的存储:  

  4. 其中字节是最小的存储单元,一个字节称为一个存储单元(内存单元),不同数据类型所占的存储空间不等  

  5. 为了正确的访问内存单元,每个内存单元都有一个编号.内存单元的编号称为地址  

  6. 内存单元的数据是今天得重点内容  

  7. 访问方式:  

  8. 直接访问和间接访问  

  9. 直接访问:  

  10. 直接访问内存空间的内容 例如 :a = 20;b = 2 * a;  

  11. 间接访问:  

  12. 通过内存单元编号以及数据所占字节数访问内存中的数据  

  13. 间接访问在程序中随处可见,指针是间接访问的常用方式.  

  14. 1.指针:  

  15. 指针是内存中的数据的内存编号  

  16. 程序中的每个数据都有地址  

  17. 通过&符号取变量的地址,例如:a = 20; printf(“%p”, &a);//打印内存地址  

  18. 指针变量  

  19. 指针变量是C语言中存放内存编号的量.  

  20. 指针变量的定义:  

  21. int *p =NULL;//NULL恒等于0  

  22. 与普通变量不同的是.定义指针变量的时候.前面需要加*  

  23. 指针变量的类型修饰符表示:该指针变量保存的指针对应的存储区域是一个整形(或者其他类型)的存储区域.这里指针变量有别于普通变量所以变量名前加一个*来区分  

  24. 使用*操作符,访问内存编号里面对应的内容  

  25. int a = 5;  

  26. int *p = NULL;  

  27. p = &a;  

  28. printf(“%d”, *p);  

  29. 指针变量是存放数组的变量  

  30. *和&配套使用  

  31. *是取值运算符,可以通过*+变量名的形式访问指针变量存储的指针对应的存储空间的内容  

  32. &p 指针p本身的地址  

  33. 指针的重指向  

  34. int a = 3, b = 5;  

  35. int *p = &a;  

  36. p = &b;  

  37. *p = 5;  

  38. //指针变量的赋值意味着重指向  

  39. 指针变量的重指向,本身就是对指针变量做重新赋值的操作,因为指针变量并不脱离变量的范畴,在程序序运行期间可以对一个已经定义的指针变量做重新赋值,让它保存另一个存储空间的地址,这时候之前所做保存的地址就会被覆盖掉  

  40. 2.指针的类型  

  41. 指针变量是存放内存地址的变量  

  42. 因为内存地址只跟操作系统有关,所以指针变量所占的内存大小取决于操作系统位数(32位系统指针占四个字节)  

  43. 不同类型的指针区别:主要作用 指针自增运算,指针移动字节数多少,以及用*取值时,取多少字节数据.  

  44. 注意事项:  

  45. int *p = NULL;此时的*只起到修饰的作用,告诉编译器,p是个指针.  

  46. 数组  

  47. 在C语言中,数组是构造类型,系统会分配一段连续空间来存储数组的全部数据,数组名代表数组元素的首地址(第一个元素的内存地址)  

  48. 3.指针与数组  

  49. .指针可以当数组名使用  

  50. p[1] = 3;  

  51. 恒等于 a[1];  

  52. 恒等于*(p + 1);  

  53. 恒等于*(a + 1);  

  54. (1)所占空间不同  

  55. 指针所占空间至于操作系统位数有关  

  56. 数组所占空间与元素个数有关,数据类型有关  

  57. (2)数组名是常量地址  

  58. 数组名不能重指向(不能赋值)  

  59. 指针可以重定向  

  60. 4.指针与字符串  

  61. C语言用字符数组保存字符串;  

  62. 指针数组  

  63. 存放指针的数组称为指针数组.  

  64. 注意可以通过指针来修改字符数组,但不可以修改常量字符串.<span style="font-size:18px;">  

  65. </span></span></h2> 


指针简述