指针
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. 在 CentOS7 上安装 swftools

    1.从官网下载 swftools,这里下载的是 0.9.2 版本: wget http://www.swftools.org/swftools-0.9.2.tar.gz 2.下载后得到 swftool ...

  2. vue-devtools插件安装

    1.git clone https://github.com/vuejs/vue-devtools.git 2.此时表示vue-devtools包下载完成,进入到对应的目录下cd vue-devtoo ...

  3. java技术小白的入门

    一.入门书籍 1,疯狂java讲义 2,java编程思想 3,Maven权威指南 4,Spring 3.0就是这么简单 5,Spring技术内幕 6,Spring实战 7,Maven实战 二.入门业务 ...

  4. Promise对象(异步编程)

    Promise对象解决函数的异步调用(跟回调函数一样) 三种状态: 未完成(pending)已完成(fulfilled)失败(rejected) 通过then函数来链式调用 目前市面上流行的一些类库:

  5. linux系统unzip文件报错的解决方案

    data.zip文件有4G多,解压的时候出问题了. Archive:  data.zip End-of-central-directorysignature not found.  Either th ...

  6. Azure本月最新活动,速度Mark!!

    缤纷五月,翠色盈盈,风光如画,小编在这里给大家汇总了这个多彩五月最新的活动合集.我们一切都准备好了,就等你来参加了~ 首先最重磅的当然是新一届的全球微软开发者大会!   有吃有喝有 Build,5 月 ...

  7. VS2015卸载方法

    VS2015卸载 直接再控制面板的卸载程序中找到 VS2015 的程序,邮件更改,安装程序会被打开,里面有三个选项包含卸载,点击卸载[记得在卸载前如果有打开过 VS 最好重启一下,重启后不要打开 VS ...

  8. CentOS下用rinetd做端口转发

    windows下的端口转发一般用的是自带的nat和porttunnel.portmap linux下端口转发映射的程序叫rinetd,启动方法rinetd -c /etc/rinetd.conf  , ...

  9. Python实现接口测试中的常见四种Post请求数据

    前情: 在日常的接口测试工作中,模拟接口请求通常有两种方法, 利用工具来模拟,比如fiddler,postman,poster,soapUI等 利用代码来模拟,使用到一些网络模块,比如HttpClie ...

  10. CentOS7 设置开机自启

    [root@master-1 ~]# systemctl enable mariadb ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/sy ...