当前位置: 首页 > news >正文

[VC++入门]指针一

  俗话说没有搞清楚指针就没有学会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[ ]={246810};
 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  }

转载于:https://www.cnblogs.com/smallfa/p/6278852.html

相关文章:

  • 假期前端自学安排
  • UE4新手编程之创建C++项目
  • flex 弹性布局整理
  • JavaScript中遍历数组 最好不要使用 for in 遍历
  • View-Controller-Containment
  • 【Python网络爬虫四】通过关键字爬取多张百度图片的图片
  • 阅读笔记一
  • 第六百二十八天 how can I 坚持
  • Atitit opencv 模板匹配
  • 线段树练习3
  • ROS学习笔记(十三)—— Publisher and Subscriber
  • JavaScript 中 for 循环
  • 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)
  • sql语句
  • 寒假生活
  • [数据结构]链表的实现在PHP中
  • 2017-08-04 前端日报
  • go append函数以及写入
  • JS变量作用域
  • LeetCode18.四数之和 JavaScript
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 飞驰在Mesos的涡轮引擎上
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 少走弯路,给Java 1~5 年程序员的建议
  • 无服务器化是企业 IT 架构的未来吗?
  • 用Canvas画一棵二叉树
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # Apache SeaTunnel 究竟是什么?
  • # 透过事物看本质的能力怎么培养?
  • #pragma multi_compile #pragma shader_feature
  • (1)(1.13) SiK无线电高级配置(五)
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (ZT)一个美国文科博士的YardLife
  • (分享)自己整理的一些简单awk实用语句
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (转)详解PHP处理密码的几种方式
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .cfg\.dat\.mak(持续补充)
  • .htaccess 强制https 单独排除某个目录
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET框架
  • [ 蓝桥杯Web真题 ]-布局切换
  • [bzoj 3534][Sdoi2014] 重建
  • [CERC2017]Cumulative Code
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [Docker]十.Docker Swarm讲解
  • [LeetCode] 196. 删除重复的电子邮箱
  • [Oh My C++ Diary]结构体变量的声明
  • [OpenGL(Win32)] - 3D 轮廓字体