指针
1. 什么是指针?   
2. 指针可不可怕?
3. 指针好不好玩?
4. 怎么学好指针?
    C语言是跟内存打交道的语言,指针就是内存地址。指针无处不在,指针并不可怕,相反,等你学到一定程度后,会有一种,看见指针就会有亲切的感觉。
    指针是很好玩的东西。大多数人觉得指针难学,都是因为觉得它太抽象,不知道在讲什么,所以我认为学好指针的要领就是画图。将抽象的东西画出来,学到深处,再将画出来的东西抽象化。
    另外我从指针开始学习c语言是有原因的。因为后面所谓的 数组 和 结构体 的本质,其实都是指针。先知道什么指针,再去学数组和结构体,就是知其所以然的感觉。
    首先,什么是指针。指针是一个地址.???!
    它的写法是:数据类型 *指针变量. ???(别逼我打人啊, 什么鬼啊)
    好啦好啦,认识指针还要从基本数据类型说起 .任何东西不能是没有依据的,指针也是,他不是凭空出现的产物.
        
        基本数据类型: int a = 10;
        指针:          int *p = 地址;
        *p 是一个整体,就相当于变量 a
        a 的值表示的是一个数值,而指针通过用一种 带*的变量,来告知系统,我是指针.里面装的东西是一个地址.
        这种带*的变量,就是 --> 指针变量啦.
        变量a 的具体内容是 10;(数值)
        指针变量 p 的具体内容 是 一个地址 .
    再回过头来看基本数据类型 .
        声明一个基本数据类型要哪些条件? 数据类型 和变量名
        把变量当做一个盒子的话,修饰这个盒子有3要素. 盒子的位置 盒子的区域 盒子的大小.
        auto int a ; 就阐述了这三个属性.
        
            盒子的位置 是a所在的地址,可以通过 &a 来获得.
            盒子的区域是栈空间,默认是auto,可以省略.
            盒子的大小是int大小,即这个盒子有4byte的大小.
        再将盒子换成空间看一下, char b;
            我们在内存中开辟了一个空间,我们给这个空间取了一个名字叫做 b,那这个空间的地址是&b.
            这个空间默认在栈区.
            这个空间的大小 是char大小,即 1byte的大小.
        再试试用同样的方法来认识一下指针. char *p = 0xA0;
            
            假设0xA0,是内存中的一个地址 .
            我们习以为常的认为, 普通变量呢,是一个方方正正的小盒子,而把指针现象成一个小圆圈 .
            所以呢,这里有一个小圆圈,它的地址我们先不管
            也是默认的栈空间 .
            然后它既然是指针,就有一个箭头指出来,指向了一个地址为 0xA0 的小盒子 .
            那这个小盒子多大呢? 这个小盒子是char大小 .
  

那这个小圆圈本身有多大呢?
            这个小圆圈的大小是int 大小的. 为什么是int大小,请看番外.
    
    指针介绍完了,再次回过头来,看一下,指针的声明和使用.
        指针变量的声明: int *p;
        指针变量的使用:
            对指针指向的小盒子的取值和赋值 : *p;
            对指针变量分身的赋值 p = &a;
        注意: *号在声明的时候,做标识符,表示这个变量是指针变量
            *号在使用的时候,是运算符,表示 取值运算.

     int mian(){

             int a = ;     //普通变量a的声明
int *p; //指针变量p的声明 p = &a; //指针变量的使用,对变量a取地址,然后付给指针变量p; 这样p就指向变量a 这个小盒子. printf("%d\n",*p); //指针变量的使用,*p 表示把指针变量p指向的小盒子里面的值给取出来,然后输出. //输出10 *p = ; //通过指针,对小盒子a 赋值,等价于 a = 20; printf("%d\n",*p); //输出20.
return ;
}
    指针和修饰符的那些事.
        前面讲的指针默认都是auto类型的,那指针还有其他的修饰符,最常用的就是const.
            指针和const会发生很神奇的事情.
            1. const char *p;
            2. char const *p;
            3. const char const *p;
            怎么读这三句话?
            1.有一个指针p,它可以指向任何地址,但是 被指向的小盒子里面的内容是 const不能变的               //字符串
            2. 有一个指针p, 它指向哪里一旦被确定下来后,就不能再指向其它地方了, 但是它所指向的内容是可以改变的.  //硬件资源
            3. 有一个指针p,它指向的位置是固定的,指向的小盒子里面的内容也是固定的.                          //ROM

  int mian(){

             const char *p = "hellopoint"    //指针指向一个字符串

             printf("the first word is %c",*p); //第一个字母是 h

             *p = 'k'; //将第一个字母改成 k ,段错误,因为 修饰符是const.
return ;
}

 

最新文章

  1. ViewController respondsToSelector 错误的解决方法
  2. 扩大ubuntu虚拟机硬盘空间
  3. 总结Android中遇见的OOM
  4. berkeley db replica机制 - 消息处理
  5. js常用函数
  6. Django1.8教程——从零开始搭建一个完整django博客(一)
  7. 二进制流 最后一段数据是最后一次读取的byte数组没填满造成的
  8. 使用Retrofit和RxJava
  9. 获取Pid
  10. partition分区
  11. SQLServer之修改DEFAULT约束
  12. PYTHON基础-入门
  13. Python是如何进行内存管理
  14. mybatis 枚举的支持
  15. C# 设置按钮快捷键
  16. Python3基础 dict 推导式 生成10以内+奇数的值为True 偶数为False的字典
  17. JavaServlet实现下载功能
  18. alias指令别名和 sshpass命令简化ssh登陆
  19. Android仿QQ登录下拉历史列表
  20. java算法(二) 快速排序

热门文章

  1. poj 3107 删点最大分支最小
  2. 拖拽事件--select外边框拖拽
  3. 【Microsoft Azure学习之旅】Azure Java SDK - Service Bus的认证问题
  4. 【QT】Qaction和触发函数建立连接的方法
  5. Bucking the stigma (留学生请摘掉有色眼镜看社区大学)
  6. kk录像机怎么剪辑视频 kk录像机视频剪辑教程
  7. Linux下安装部署RabbitMQ
  8. 网页打开速度优化——HTTP请求头及响应头
  9. 设定网页最小最大宽度和高度(兼容IE6)
  10. 2017.9.30 Java中引用类型变量的创建及使用&循环的高级