C语言指针篇(一)指针与指针变量

时间:2021-07-22 01:52:17
指针
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大小 .
  C语言指针篇(一)指针与指针变量
那这个小圆圈本身有多大呢?
            这个小圆圈的大小是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语言笔记&lpar;指针篇&rpar;

    指针篇 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语言之指针篇&lpar;一&rpar;

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

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

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

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

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

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

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

随机推荐

  1. Windows 网络通讯开发

    Windows 网络通讯开发 一.Windows网络开发API 由于C++标准库中没有网络库,所以进行网络开发的时候要调用系统API.Windows通讯开发API包括以下几个基本函数及成员类型: 1. ...

  2. MVC5项目中添加Wep API

    一.查看MVC版本,决定你有没有必要看这篇文章 打开web.config,看到以下内容 <dependentAssembly> <assemblyIdentity name=&quo ...

  3. Python&lowbar;实现三级目录展示

    要求: 1.三级菜单 2.可依次选择进入各子菜单,选择序号进入目录 3.输入b返回上级目录,q退出更改目录 代码实现: #!/bin/env python #!--*--coding:utf-8 -- ...

  4. MFC中快速应用OpenCV(转)

    转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...

  5. Scut 进阶:EntityChangeEvent

    EntityChangeEvent 最重要的两个变量:ItemEvent.ChildrenEvent. ItemEvent 的功能流转: 从整个跳转图可以看出,这个功能的作用是 -- 自动将数据修改保 ...

  6. 【阿里聚安全&&num;183&semi;安全周刊】 全美警局已普遍拥有破解 iPhone 的能力 &vert; 女黑客破解任天堂Switch,称硬件漏洞无法修复

    本周的七个关键词: 破解 iPhone丨 女黑客破解任天堂丨假的身份证 丨 扫黄打非丨华盛顿特区发现手机间谍设备 丨 Telegram被俄罗斯监管机构告上法庭丨价值5万美金的Firefox浏览器漏洞 ...

  7. js之prototype 原型对象

    原型对象prototype可以这么理解,是该类的实例对象的模板,每个实例对象都是先复制一份该类的prototype,通过这个可以让类的实例拥有相同的功能   String.prototype.say= ...

  8. java之高效操作文件

    代码: import java.io.IOException; import java.nio.file.FileVisitOption; import java.nio.file.FileVisit ...

  9. opencv 3&period;2 vs2015 debug assertion &lowbar;&lowbar;acrt&lowbar;first&lowbar;block &equals;&equals; header

    网上复制了一个转直方图的代码 ,说来也奇怪, 用imshow 显示 图片在独立窗体内,不存在问题, 要注释掉这段代码就出现了下边的错误. 网上查了查,原来是程序中 有个std::vector<c ...

  10. &period;NET Out Of Memory Exception - Used 1&period;3GB but have 16GB installed

    I am getting an Out Of Memory exception in my c# application when the memory usage for the applicati ...