俗话说没有搞清楚指针就没有学会C/C++,所以指针是一个相当重要的东东,相当年在用 C#调用C++写的动态链接库时,以为C++中的指针就是C#中的引用类型(ref),但是看了一下却不是这样。指针当然和内存是离不开的,有很多版本的定义,但是我觉得最容易理解的是:每一个变量都有一个内存地址,这个地址就称为指针。

有两个与指针有关的运算符:取地址运算符“&”(用于取一个变量的地址)和指针运算符“*”(以一个指针作为其操作数,其运算结果表示所指向的变量)。

 1 #include  <iostream.h>
 2 void   main()
 3 {
 4     int  a, b, *pa, *pb;
 5     a=10;   b=20;
 6     pa=&a; pb=&b;        // 使pa指向a,pb指向b
 7     cout<<*pa<<','<<*pb<<'\n';
 8     pa=&b;   pb=&a;        // 使pa指向b,pb指向a
 9     cout<<*pa<<','<<*pb<<'\n';
10     *pa=100;   *pb=200;    // 分别对b和a赋值
11     cout<<a<<','<<b<<'\n';
12  }

从上面我们可以看到声明了两个变量a,b类型为int,两个指针pa,pb(指针类型为int *,指向的类型为int)。第一步&a取得为a所分配的地址即将pa指向a的地址,所以*pa=a=10,同理*pb=b=20;第二步同理可以得到*pa=b=20;*pb=a=10;第三步由于第二步将pa指向b,pb指向a所以a=*pb=200,b=*pa=100。

指针与数组关系密切,编程时可以用指针代替下标引用数组元素,指针使数组的使用更为灵活、有效。当声明一个数组后,编译程序会按照数组的类型和长度为它分配内存空间,数组名表示数组在内存中的首地址;当用一个指针变量存储数组首地址时,该指针就指向这个数组,就可以通过指针运算间接访问数组的元素。指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。

 1 #include  <iostream.h>
 2 void   main()
 3 {
 4     int   a[ ]={2, 4, 6, 8, 10};
 5     int*  pa=a;            // 或pa=&a[0]
 6     int   result=0;
 7     for(int i=0; i<5; i++)
 8     {
 9         result+=*pa;           // 通过指针访问数组元素
10         pa++;            // 指针运算
11     }
12     cout<<"result="<<result<<'\n';
13  }

从上面我们可以看到首先我们声明了一个数组,并付值也就是说分配其内存。而a表示数组在内存中的首地址,声明一个指针并指向a。则pa++就是指向数组的下一个地址(int类型占四个字节)。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/06/05/vcpp_points.html,如需转载请自行联系原作者

[VC++入门]指针一相关推荐

  1. VC入门宝典 by 何志丹

    原文地址为: VC入门宝典 by 何志丹 這陣子從頭開始學習:--------------------- 为了方便,也为了vb-->vc过渡成功! VC入门宝典 何志丹 『针对对象』 想学VC, ...

  2. c语言int转字符串_C语言零基础入门-指针-05

    C语言零基础入门-指针-05 本节要点: 1,字符指针. 2,字符串指针. 3,指针的参数传递 4,多重指针 01. 字符指针 这里的定义与前面的基本一样,所谓的字符指针就是这个指针指向的是一个字符型 ...

  3. 超图桌面开发VC++ 入门程序

    先看一下自己的超图版本:下载对应版本的C++开发包: 桌面8.1.0: iServer 8.1.5724: 下载 for Windows: 下载以后:是一些库和示例解决方案:无需安装: 用VC2019 ...

  4. python 指针_python入门指针

    这篇文章主要记录了我自学python的经历和一些比较有效的方式方法,对于还在门外撞墙的同学来说还是很有帮助的. 自学之初 当初想学习python是因为18年夏天,我参与的创业公司处于一个快速发展阶段, ...

  5. c语言指针查找数组一个数_C语言快速入门——指针与数组

    与数组有关的地址 我本来打算以一个程序开始,让我们直接理解相关概念.但转念一想,如果引导你思考问题而得出结论,或许会有另一种效果,因此,我们的讨论以下面的定义为基础. int a = 9;int b[ ...

  6. VC++入门经典学习笔记--结构和类

    1.自定义数据类型 C++中的结构:结构是使用关键字struct定义的用户定义类型.结构起源于C语言,C++继承并扩展了结构.C++中的结构在功能上可以由类代替,因为任何使用结构能够做到的事情都可以使 ...

  7. vc++ 关于 指针操作

    string str="abcdefg";//***测试一char * aa=new char[20];memset(aa,0,20);memcpy(aa,&str[0], ...

  8. vc++学习精髓(收集,整理)

    vc++学习精髓(收集,整理) 以下是很多VC爱好者的学习经历,希望对大家有所帮助: 我记得我在网上是这么说的:先学win32的SDK,也就是API, 再学MFC,这么一来呢,就先有个基础,MFC是A ...

  9. VC文件读写操作总结

    From:http://www.xiaozhou.net/ReadNews.asp?NewsID=248 各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到 ...

最新文章

  1. Introduction to Objects
  2. JavaScript的正则表达式实现邮箱校验
  3. 反网络爬虫以及解决方案
  4. IOS笔记 本地化多语言支持
  5. 记忆化搜索,FatMouse and Cheese
  6. window server 2008 R2 启用方法
  7. 拉普拉斯算子属于卷积方法吗_论文笔记 - 图卷积神经网络综述
  8. 苹果Mac Final Cut Pro更新后,如何将视频分享到YouTube?
  9. 云计算机室怎么样映射d 盘,云服务器磁盘如何映射到本地磁盘
  10. Cuda Graph (cuda 优化)
  11. MATLAB 常用绘图命令
  12. oracle的dbv命令,Oracle的DBV命令行工具用法详解
  13. (视频分辨率介绍)混淆的概念:SIF与CIF、4CIF与D1
  14. 清除网页缓存的快捷键
  15. Windows系统服务器系统日志在哪里查看?
  16. 游戏角色设计思路规划路径有哪些?
  17. 00003 不思议迷宫.0009.9:命运之链
  18. 手把手教你Python+selenium爬虫百度文库源码+解析
  19. java的声音处理方法
  20. 计算机控制系统2017模拟题,计算机控制系统模拟试题.doc

热门文章

  1. LeetCode 445. Add Two Numbers II--面试算法题--C++,Python解法
  2. 在C++中对字符串std::string使用switch/case语句
  3. php自定义函数出现乱码,php的imagettftext 函数出现乱码的解决方法
  4. mysql数据库c 操作o_linux下c操作mysql数据库。gcc报错。谁能帮忙看下啊。
  5. Docker运行sonarqube-(代码质量检测平台)
  6. android NinePatch图片制做
  7. java condition_死磕 java同步系列之ReentrantLock源码解析(二)
  8. python exec函数_Python3 exec 函数
  9. Python3+Selenium3 之滚动条操作实例与单选框的实例演示
  10. redis php数据插入失败,redis插入数据,恢复数据测试(禁止淘汰策略下恢复大于redis内存限制数据情况)...