1、什么是指针
  指针是一种数据类型,与其它的数据类型不同的是指针是一种“用来存放地址值的”变量。举一个简单的例子:
如果定义了一个整型变量,根据整型变量的特点,它可以存放的数是整数。
如:int a; a=100; 这样就把整型常量赋给了变量a。但是如果写成这样:a=123.33;就会出问题,最后输出变量a的值结果是123。现在说到指针,其实地址值也是一个整型数,如某某变量的地址值为36542,说明这个变量被分配在内存地址值为36542的地方。能不能这样进行推理,既然地址值也是整型数,整型变量正好可以用来存放整型数,那不是一个整型变量可以用来存放地址的值吗。程序写成下面这样:
  int a,b;
    a=&b;
很明显,这样写是错误的。原因在于不能简单地把地址理解为整型数。
应有这样的对应关系: 地址值<--->指针;  整型数<--->int 型变量。
所以有这样的说法:“指针就是地址”(指针就是存放地址值的一种数据类型)
  下面是一段正确的程序:
  int a,*p;
    p=&a;     /*把变量a的地址值赋给指针p*/
    2、什么是void指针
  void的意思就是“无值”或“无类型”。void指针一般称为“通用指针”或“泛指针”。之所以有这样的名字是因为使用void指针可以很容易地把void指针转换成其它数据类型的指针。例如在为一个指针分配内存空间的时候:
    int *p;
    p=(int *)malloc(......);  本来函数malloc的返回值是void类型,在这里通过在前面加上一个带括号的int*就把void*类型转换成了int*类型。
  所以不能简单的把void看成“无”的意思。void数据类型是一种很重要的数据类型。

  3、指针可以相加减吗
  可以相互加减。但是一定要作有意义的运算。当二个指针指向同一个数组的时候,它们相加减是有意义的。如果二个指针分别指向二个不同的数组,那么指针之间的相加减就没有什么意义。指向同一个数组时,其相加减的结果为二个指针之间的元素数目。

  4、什么是NULL指针
  NULL指针是不指向任何一个地址的指针。这样的指针一般是允许的。当一个指针为NULL的时候,不要对它进行存取。

  5、什么是“野”指针
  野指针是不由程序员或操作者所能控制的指针。当在一个程序里面定义了一个指针而又没有给这个指针一个具体地址指向的时候,这个指针会随意地指向一个地址,这样的指针就是一个野指针。如果这个地址后面的内存空间没有什么重要的数据则不会造成不好的后果,但是一旦这里面存放了有用的数据,那么这些数据随时都有被野指针存取的危险,如果这样,数据就会被破坏,程序也会崩溃。所以在程序里面是一定要禁止任何野指针的存在。当定义了一个指针的时候,要马上给这个指针分配一个内存地址的指向。这样程序才不会因为指针而出现意外。

  6、NULL的值是什么
  NULL不是被定义为0就是被定义成(void *)0,这二种值基本上是一样的。
  如有这样的语句: if(p==NULL) 或者写成 if(p==0) 其作用是一样。

7、什么是“内存泄漏”
  当定义了一个指针的时候,立即要为这个指针分配一个内存空间。这只防止了野指针的产生。当一个指针使用完毕要立即释放掉这个指针所占用的内存空间---这有二方面的意义:  1)避免了内存空间的泿费; 2)防止了内存泄漏。为什么会产生内存泄漏:如果没有及时释放掉指针所占用的内存空间,而在下次使用这个指针时又给这个指针分配了内存空间,这样的次数一多,内存空间就慢慢被消耗掉了。所以形象地称这种现象为内存泄漏。
  如下面这样一个程序:
  void *p;
    for(;;)
       p=malloc(20);      /*这20个字节的内存空间是随意指定的*/
这样的一个小程序,大家不要随便运行它。你可以在集成环境中单步调试运行,可以看一下每步运行后的结果。可以看到,每一次循环都会“吃掉”20个字节的内存,无数次之后,再多的内存也慢慢地“泄漏”,最后没有内存可用就死机。(与这个程序配合需要一段检测整机总的内存容量的程序,以观察内存总量的变化。这里虽然没有这一段程序,但是看得到每次分配的内存地址值是不相同的)

8、near指针和far指针
在DOS下(实模式)地址是分段的,每一段的长度为64K字节,刚好是16位(二进制的十六位)。
near指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。
far指针的长度是32位,含有一个16位的基地址和16位的偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far指针的1M字节的偏移量。所以far指针的寻址范围是1M字节,超过了一个段64K的容量。例如一个far指针的段地址为0x7000,偏移量为0x1244,则该指针指向地址0x71224.如果一个far指针的段地址是0x7122,偏移量为0x0004,则该指针也指向地址0x71224。
    如果没有指定一个指针是near或far,那么默认是near。所以far指针要显式指定。far指针工作起来要慢一些,因为每次访问一个far指针时,都要将数据段或程序段的数据交换出来。另外,far指针的运算也比较反常,例如上面讲到的far指针指向同一个地址,但是比较的结果却不相同。

9、什么时候使用far指针
当使用小代码或小数据存储模式时,不能编译一个有很多代码或数据的程序。因为在64K的一个段中,不能放下所有的代码与数据。为了解决这个问题,需要指定以far函数或far指针来使用这部分的空间(64K以外的空间)。许多库函数就是显式地指定为far函数的形式。far指针通常和farmalloc()这样的内存分配函数一起使用

转载于:https://www.cnblogs.com/boneking/archive/2008/11/20/1337812.html

[VC++]菜鸟问与答(指针)相关推荐

  1. 养生堂vc产品问与答

    q1什么是维生素c? a1维生素c是人体必需的一种维生素,水溶性抗氧化剂,能够消除体内水分环境中多余自由基,帮助增强人体免疫力,因其对肌肤的美白有明显成效,被誉为"最经典的美白元素" ...

  2. python3简明教程-实验楼_#python实验楼教程#学Python哪里有一问一答的Python学习?求具体的~...

    学Python哪里有一问一答的Python学习?求具体的- 实的会员课程 慕课网 实验楼是IT在线学习网站,为用户提供的不频,而是配置好的虚拟机,通过虚拟的实验环境,学习者可边看文档边动手操作,从而提 ...

  3. 《逆袭进大厂》第十二弹之MySQL重点篇27问27答

    大家好,我是阿秀. 我来更新了,本期是 MySQL 第二期,至此 MySQL 部分就全部更新完毕了,下一弹就是 Redis 篇了. 上一篇文章中,小伙伴建议将资料按照更细粒度去整理一番,我觉得是非常不 ...

  4. 【一问一答】错题库整理

    此文章不断更新从 "一问一答"上遇到的做错的题目,持续更新 No.1   by 17th Sep 2013 以下代码的输出结果 #include <iostream> ...

  5. matlab二重指针,VC++中函数返回数组指针或者带指针的结构体的编译方式是否可取? - 程序语言 - 小木虫 - 学术 科研 互动社区...

    libralibra 构造函数+析构函数应该是比较正规的做法吧, 你的结构体/类被提早释放的问题,是不是那个结构体是局部变量,当超出作用域时对象被销毁,如果存在析构函数,会被默认调用, 如果你返回结构 ...

  6. 操作系统学习常见疑惑问与答

    主要看了下特权级这块,和上次看的保护模式下寻址,发现于渊的书有个问题,很多地方为了回避繁杂的理论,反而把一些要点略去了,最后自己还是不得不到网上到处查资料~ 以下内容貌似是一个即将毕业的学长做毕设所总 ...

  7. Java面试题36题快问快答

    六六大顺,快问快答Java面试36问!我们从面试来反推Java学习. 少侠,少侠,今天我们来看Java面试题,从大厂梦反推基础学习. 面试题: JDK 和 JRE 有什么区别? final 在 jav ...

  8. 超全大厂算法岗百问百答(推荐系统/机器学习/深度学习/C++/Spark/python)

    之前在准备秋招的时候,每次看到牛客网上那些大神手握七八个大厂的offer,就羡慕到不行,那会儿自己的机器学习算法水平还没法搬上台面,顶多也就是看了几个课程.做了两个比赛的水平,然后比赛还没得到任何的名 ...

  9. 《C++入门经典(第5版•修订版)》——2.6 问与答

    本节书摘来自异步社区出版社<C++入门经典(第5版•修订版)>一书中的第2章,第2.6节,作者:[美]Jesse Liberty , Rogers Cadenhead,更多章节内容可以访问 ...

  10. 《C++入门经典(第6版)》——1.5 问与答

    本节书摘来自异步社区出版社<C++入门经典(第6版)>一书中的第1章,第1.5节,作者: [美]Rogers Cadenhead(罗格斯 卡登海德) , Jesse Liberty(杰西 ...

最新文章

  1. 转强大Vim的配额置
  2. 什么是网络推广浅析网站在优化时该如何让蜘蛛自觉爬行网站?
  3. [YTU]_2474( C++习题 输入输出--保护继承)
  4. python开机自动运行_python 设置开机启动脚本
  5. Alan Walker MV 合辑01 by defender
  6. 剑指offer——21.调整数组顺序使奇数位于偶数前面
  7. 从TensorFlow到PyTorch:九大深度学习框架哪款最适合你?
  8. 论文阅读(4) 游泳水母对被动能量再捕获的广泛利用(2018)
  9. 金蝶 插入重复键值_北京数字化的金蝶财务软件软件-北京金普蝶软件科技有限公司...
  10. java 拼音模糊查询_java 编写模糊查询
  11. oracle设置临时表空间,oracle操作临时表空间
  12. 突发奇想!自动化测试在测试过程中该怎样提升效率?
  13. Linux: 软件包管理工具 yum/dnf 命令(Fedora/CentOS/RedHat)
  14. 十万个为什么哪个版本适合小学生阅读
  15. A problem occurred configuring root project ‘xxx‘.
  16. CentOS 7下安装Redis
  17. English improvement of IT Test(2012)
  18. 前端的短信验证码如何做(和后端配合)
  19. 科学中的人工智能革命
  20. python rot13解密_牛刀小试——Python 2.7下的rot13编码与解码

热门文章

  1. 适用于ASP.NET的自定义分页控件
  2. sql2005各种版本
  3. 2019-07-11 nginx 下网页显示乱码
  4. Excel--数据分列功能
  5. MyBatis 别名标签 sql的复用
  6. Android内存、性能是程序永恒的话题
  7. Oracle odi 数据表导出到文件
  8. linux网络 (三):网络测试
  9. selenium遇到的问题记录
  10. JS 将图片编码BASE64