指针
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 ;
}

 

C语言指针篇(一)指针与指针变量的更多相关文章

  1. C语言数组篇(二)指针数组和数组指针

    数组指针 和 指针数组         这两个名词可以说是经常搞混了         数组指针--> 数组的指针       就是前面讲的 指向数组a的指针p;         指针数组--&g ...

  2. C语言基础篇(三) 指针

    导航: 1.指针     2. 数组     3. 结构体,共用体     4. 内存分布图     5. 段错误分析 ----->x<------------->x<---- ...

  3. 瘋子C语言笔记(指针篇)

    指针篇 1.基本指针变量 (1)定义 int i,j; int *pointer_1,*pointer_2; pointer_1 = &i; pointer_2 = &j; 等价于 i ...

  4. 深入理解C语言中的指针与数组之指针篇

    转载于http://blog.csdn.net/hinyunsin/article/details/6662851     前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...

  5. 深入理解C语言中的指针与数组之指针篇(转载)

    前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...

  6. 快速上手系列-C语言之指针篇(一)

    快速上手系列-C语言之指针篇(一) 浊酒敬风尘 发布时间:18-06-2108:29 指针的灵活运用使得c语言更加强大,指针是C语言中十分重要的部分,可以说指针是C语言的灵魂.当然指针不是万能的,但没 ...

  7. C语言重点——指针篇(一文让你完全搞懂指针)| 从内存理解指针 | 指针完全解析

    有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 注:这篇文章好好看完一定会让你掌握好指针的本质 C语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...

  8. 如何系统学习C 语言(中)之 指针篇

    谈到指针,我们可能会想到钟表上的指针,但这里的指针不是现实生活中看得见摸得着的钟表上的指针,c 语言中的指针只存在于逻辑思维中,物理上并不存在. 同时,指针也是C 语言中最精华的部分,通过灵活地运用指 ...

  9. 大一C语言学习笔记(9)---指针篇--从”内存的使用“和“流程控制”的角度来理解“指针变量的使用‘

    #深入理解指针变量 举个错误栗子: //以下代码的目的是输出100和1000,但输出结果只有一个100 #include<stdio.h> #include<malloc.h> ...

随机推荐

  1. Fibonacci(斐波那契数列)的第N位数

    无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为F(n)=1 ...........(n=1或n=2)F(n)=F(n-1)+F(n-2).. ...

  2. http 中各个 header 的含义

    HTTP Request的Header信息 1.HTTP请求方式 如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并 ...

  3. 仿真DDR3 Controller IP

    一.Creat a new project,generate a new DDR3 IP,Close Project. 二.打开工程文件下的 X_example_design-->simulat ...

  4. (转)轻松解决 MyEclipse、Eclipse 编译时提示 @Override The method of type must override a superclass method 即 @Override 标注问题

    刚才在把工程从其他地方导入到自己机子的 MyEclipse 下时,出现了 The method of type must override a superclass method ,提示的是实现类必须 ...

  5. 易客CRM-3.0.4 (OpenLogic CentOS 6.5)

    平台: CentOS 类型: 虚拟机镜像 软件包: apache1.3.8 centos6.5 mysql5.1.72 php5.2.17 commercial crm linux 服务优惠价: 按服 ...

  6. 建堆复杂度O(n)证明

    堆排序中首先需要做的就是建堆,广为人知的是建堆复杂度才O(n),它的证明过程涉及到高等数学中的级数或者概率论,不过证明整体来讲是比较易懂的. 堆排过程 代码如下 void print(vector&l ...

  7. Html : 规范html代码的网站

    html代码的规范也是很重要的,这里推荐一个网站,很好用,仓鼠是经常用的啦! https://htmlformatter.com/ 以上

  8. sublime text2卸载和重新安装(转载)

    很多同学使用 sublime text2 的时候,出现一些奇怪的bug,且重启无法修复. 于是,就会想到卸载 sublime text2 再重新安装. 然而,你会发现,重新安装后,这个bug任然存在, ...

  9. css术语和概念

      .vocabulary{ height:99px; color:transparent; } 属性 上面示意css代码中的height和color就是属性.   值 上面的99px就是值 整数值: ...

  10. 百度非会员满速下载利器(IDM)Internet Download Manager v6.30.8 中文特别版

    下载利器(IDM)Internet Download Manager v6.30.8 中文特别版 所属分类:工具软件 应用平台:Windows 资源版本:v6.30.8 最后更新:2018年04月14 ...