鱼C论坛

 找回密码
 立即注册
查看: 2294|回复: 1

[技术交流] 关于C++指针和数组的个人浅见

[复制链接]
发表于 2016-1-7 15:19:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. /*===========================*/
  2. /*question                                          */
  3. /*1 什么是指针?                                  */
  4. /*2 什么是数组?        很简单,不赘述*/
  5. /*3 数组与指针的共性是什么?         */
  6. /*===========================*/
  7. 重点说明指针丶指针和数组共性

  8. //*****************************************************************
  9. 1 什么是指针?
  10. 指针:指针是变量的内存地址.
  11. example:
  12. //--------code-----------------------------------
  13. #include <iostream>                                                               

  14. using namespace std;

  15. int main()
  16. {
  17.         int *p;                                        //①
  18.         int n=10;                                //②
  19.         p=&n;                                        //③
  20.         cout<<"*p="<<*p<<endl;        //④
  21.         return 0;
  22. }
  23. //------------------------------------------------
  24. Explain:①声明p是指向int型变量的指针(切记)
  25.                 ②n=10,这再明显不过.
  26.                 ③将p指向n的地址,也就是说,当执行
  27.                 第三行代码时,p指向的地址中存储的
  28.                 值为10(即:使用&获得变量n的地址)
  29.                 ④输出*p,意思就是输出指针指向地址
  30.                 (n的地址)中存储的值.
  31.                        
  32.                 可见指针的类型并不是声明指针时用的整型
  33.                 指针是一个地址内存的地址是一个数字但是
  34.                 千万不要以为这个数字可以存到int或double
  35.                 型的变量中 这是大错特错的  why?
  36.                 因为这是传统!(萨维奇教授说的)
  37.                
  38.                 指针指向一个地址 这个地址由来确定
  39.                 如果你省去第二丶三行 直接将第一句改为
  40.                 int *p=10 这也是错误的 因为指针的地址
  41.                 在你创建指针时已经确定 你不能通过这种
  42.                 方式修改指针指向的内存地址
  43.                
  44.                 *是取值操作符 &是取址(地址)操作符 显然
  45.                 在p=&n中 指针p获取了变量n的内存地址 当
  46.                 进行*p输出时使用*就获取了变量n的值(因为
  47.                 指针指向了n所在的地址) so easy aha?
  48.                
  49. Summary:指针指向一个内存地址.
  50. //-------------------------------------------------               
  51. Thinking1:现在声明了一个变量,如何看到它在内存中
  52.                  的什么位置?
  53.                
  54.         ans:使用cout语句直接输出p或者&n;       
  55. //--------------------------------------------------
  56. Thinking2:指针可以计算吗?
  57.                
  58.         ans:不能进行标准算术运算,可以进行某种形式的加减
  59.                 操作.例如和数组合用时,可以通过地址偏移找到某
  60.                 个数组元素.
  61. //--------------------------------------------------

  62. //*************************************************************

  63. 2.数组
  64. 这个就不多说了吧.

  65. //*************************************************************

  66. 3.数组与指针的共性是什么?
  67. 如果没有搞清楚指针,请不要看这节,免得一直处在眩晕的状态中.

  68. 数组总是以第一个元素的内存地址作为初始地址,而不会记录其它元素
  69. 的地址,你家住在黄土高坡,黄土高坡的第一百家是你家,你总不至于通
  70. 过挨家挨户的开门看来确定吧,一个很显而易见的办法是,你记得你家的
  71. 门牌号,确定好第一家门牌号,你就可以数到100进门,那确实是你家没错

  72. 指针指向一个地址,既然你家是100号,开始的时候指针指向黄土高坡一号
  73. 你通过指针(地址)偏移到100,那就是你家,准没错.

  74. //**********************//
  75. //   共性:内存地址.                //
  76. //**********************//

  77. //利用指针遍历数组地址(核心:遍历)
  78. #include <iostream>                       
  79. using namespace std;
  80. int main()
  81. {
  82.         int a[5]={2,5,8,3,7};
  83.         int *p;
  84.         for(p=a;p<(a+5);p++)        //首条件:指针指向数组首地址       
  85.         {
  86.                 cout<<*p<<endl;                //过程:指针对数组地址进行
  87.         }                                                //遍历,向数组地址取值
  88.         return 0;
  89. }

  90. //------------------------------------------------------------------
  91. //使用数组首地址进行偏移取值(核心:偏移)
  92. #include <iostream>                       
  93. using namespace std;

  94. int main()
  95. {
  96.         int a[5]={2,3,4,5,6};
  97.         int *p;
  98.         p=a;//为何不用&a:因为a本身就是地址,取地址后再取地址是不对滴
  99.         for(int i=0;i<5;i++)       
  100.         {
  101.                 cout<<*(a+i)<<endl;
  102.         }
  103.         return 0;
  104. }
  105. //***********************************************************************


  106. 个人浅见,如有错误,望大家斧正!
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-1-7 22:06:54 | 显示全部楼层
其实数组也是指针!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 18:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表