指针

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;

注意: *号在声明的时候,做标识符,表示这个变量是指针变量

*号在使用的时候,是运算符,表示 取值运算.

1 intmian(){2

3 int a = 10; //普通变量a的声明

4 int *p; //指针变量p的声明

5

6 p = &a; //指针变量的使用,对变量a取地址,然后付给指针变量p; 这样p就指向变量a 这个小盒子.

7

8 printf("%d\n",*p); //指针变量的使用,*p 表示把指针变量p指向的小盒子里面的值给取出来,然后输出.//输出10

9

10 *p = 20; //通过指针,对小盒子a 赋值,等价于 a = 20;

11

12 printf("%d\n",*p); //输出20.

13 return 0;14 }

View Code

指针和修饰符的那些事.

前面讲的指针默认都是auto类型的,那指针还有其他的修饰符,最常用的就是const.

指针和const会发生很神奇的事情.

1. const char *p;

2. char const *p;

3. const char const *p;

怎么读这三句话?

1.有一个指针p,它可以指向任何地址,但是 被指向的小盒子里面的内容是 const不能变的               //字符串

2. 有一个指针p, 它指向哪里一旦被确定下来后,就不能再指向其它地方了, 但是它所指向的内容是可以改变的.  //硬件资源

3. 有一个指针p,它指向的位置是固定的,指向的小盒子里面的内容也是固定的.                          //ROM

1 intmian(){2

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

4

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

6

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

8 return 0;9 }

View Code

c语言 乘号 指针 避免,C语言指针篇(一)指针与指针变量相关推荐

  1. c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx

    c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...

  2. 为什么指针被誉为 C 语言灵魂?

    作者 | 编程指北 来源 |  编程指北(ID:cs_dev) 这一篇的文章主题是「指针与内存模型」. 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不 ...

  3. C语言复习篇之数组与指针

    C语言复习篇之数组与指针 学习了一段时间的嵌入式linux了,学习中有很多的东西需要总结,有经验有教训,我觉得把他写下来会更好,就当做是一种笔记的形式,记录学习中的点点滴滴,不仅仅自己可以经常复习,也 ...

  4. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

  5. printf 指针地址_c语言入门 第十四章指针

    我们之前研究的数据类型, 语句, 函数等等,这些内容可以认为是编写程序的基础,除了c语言之外,在其他的编程语言当中也会有相似的内容 我们接下来要研究的指针,可以认为是c语言独有的特性,学会如何的使用指 ...

  6. c语言fgetpos的参数,C语言fgetpos()函数:获得当前文件的读写指针(转)

    头文件:#include fgetpos()函数获得当前文件的指针所指的位置,并把该指针所指的位置信息存放到pos所指的对象中.pos以内部格式存储,仅由fgetpos()和fsetpos()使用.f ...

  7. c语言字符串加减_C语言中指针的介绍

    C语言中指针的介绍 指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编 ...

  8. 指针是c语言的灵魂,C语言之灵魂 指针学习

    指针是c语言的难点 称之为c语言的灵魂一点也不为过,不过指针用好了能事半功倍,用不好bug满天飞. 一.指针的概念 指针也是变量只不过是特殊的变量,指针的值是另一个变量的地(也就是变量所在的内存地址) ...

  9. c语言指针大全,C语言指针

    本篇文章帮大家学习c语言指针,包含了C语言指针使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. C语言中的指针是变量,也称为定位符或指示符,指向值的地址. 注意:指针是C语 ...

最新文章

  1. 《AI系统周刊》第2期:硬件支持的Tensor-train分解与高效数据处理、清华吴文斐研究组获得NSDI最佳论文奖
  2. android第一次启动超级慢
  3. 浅谈网络爬虫中广度优先算法和代码实现
  4. 操作系统:Win10系统下LocalNow和Roaming文件夹介绍
  5. python交通标志识别_YOLOv3目标检测实战:交通标志识别
  6. python写520_用Python做一个520表白神器,值得收藏
  7. 字节流抽象类 java
  8. Linux C面试题(内存管理)
  9. SAP License:SAP自学SAP常见的问题二
  10. WSO2 WSF/CPP 网络服务开发例子1--HELLO
  11. 负载均衡与分布式网络存储技术简介
  12. 让iPhone不能自动下载系统更新的一个办法
  13. 计算机excel无法打开,电脑excel打不开的解决方法
  14. 关于如何利用学生邮箱申请jetbrains免费全家桶
  15. dns劫持教您dns被劫持如何修复、dns劫持如何修复
  16. 【十三】python面向对象之类和对象
  17. 仓库码放要求_仓库货物堆放标准是怎样的?货物堆放原则和方法详解
  18. 报错“在要求输入数字处找到非数字字符”
  19. “老三样”会思考:以威胁情报驱动安全产品演进
  20. 互联网行业内卷的时代,12点前睡觉有错吗?

热门文章

  1. 改进后的新String类
  2. 栈在括号匹配中的应用
  3. Java-泛型T T与T的用法
  4. java抽象类代码_java – 抽象类和通用代码
  5. 学习SQL:INNER JOIN与LEFT JOIN
  6. 缓存 负载均衡_使用“针对临时工作负载优化”选项来保存计划缓存存储
  7. 封装和@property
  8. [网络流24题]孤岛营救问题
  9. CenterOS的安装配置(配图解)
  10. 排球计分程序功能说明书