C++——指针学习
来源:互联网 发布:什么软件聊天 编辑:程序博客网 时间:2024/06/06 11:04
数据单位
位(bit)
位(bit),音译为"比特",是计算机存储设备的最小单位,由数字0或1组成。
字节(Byte)
字节(Byte),简写为"B",音译为"拜特",简写为"B"。8个二进制位编为一组称为一个字节,即:1B=8bit。字节是计算机处理数据的基本单位,即以字节为单位解释信息。通常,一个ASCII码占1个字节;一个汉字国标码占2个字节;整数占2个字节;实数,即带有小数点的数,用4个字节组成浮点形式等。
字(word)
计算机一次存取、处理和传输的数据长度称为字,即:一组二进制数码作为一个整体来参加运算或处理的单位。一个字通常由一个或多个字节构成,用来存放一条指令或一个数据。
字长
一个字中所包含的二进制数的位数称为字长。不同的计算机,字长是不同的,常用的字长有8位、16位、32位和64位等,也就是经常说的8位机、16位机、32位机或64位机。例如,一台计算机如果用8个二进制位表示一个字,就说该机是八位机,或者说它的字长是8位的;又如,一个字由两个字节组成,即16个二进制位,则字长为16位。字长是衡量计算机性能的一个重要标志。字长越长,一次处理的数字位数越大,速度也就越快。
编址与地址
编址
对计算机存储单元编号的过程称为"编址",是以字节为单位进行的。
地址
存储单元的编号称为地址。
===》
1.内存中的每个位置都由一个独一无二的地址表示.
2.内存中的每个位置都包含一个值.
===》我们可以通过一个地址,来找到内存中的某个具体位置,然后访问到(得到)该位置的值(允许的话).这就是内存和地址简单的思想.
其实……
用指针的原因就是因为……
方便……
当然,在知乎上也有很多解答,感兴趣的话可以去看看为什么要有指针
书归正传,先看一段代码:
/*指针学习。之前一直固执的不学指针(其实是被oj吓的,以前刚刚学数组的时候就见到有报错,说我是数组越界或者是指针无意义,感到了无限的恐惧--->因此就没再学指针了)*/#include<bits/stdc++.h>using namespace std;int main(){ int *a; int input; cin>>input; a=&input; cout<<a<<endl; cout<<*a<<endl; cout<<input<<endl; return 0;}
第一行27是输入,第二行的0x69fef8就是地址,剩下两行都是数值。
那么问题来了,a和*a有什么区别?*a和input又有什么联系呢?
我们先看一下指针是如何声明的。
注:上面是截图,大家理解一下懒得打字的我。。。
附原文链接C++指针|菜鸟教程
总之,这个意思就是如果直接输出带*的那个变量的名字(而不带*号)得到的是地址,而加上*号得到的就是需要的那个值了,如果直接输出与&连接的变量名也会直接输出所需的值。
--------------------------到此就是我每次学习断开的地方------------------------------------
完全不知道这指针还有什么用,觉得还不如直接折腾a b来的简单(似乎,其实,好像……也确实,指针在除了C和C++里也没有哪里用了)。
直到上次C++实验课围观某大神用指针做题,我看的云里雾里,才坚定了我学习的心o(╥﹏╥)o
①
首先大家体谅一下好奇心旺盛到崩溃的我,忍不住试了一下如果写int a;不加*会怎么样。
结果是报错:
然后,尝试一下各种花式类型:
#include<bits/stdc++.h>using namespace std;int main(){ char *word; int *number; double *fla; string *str; char a; int b; double c; string d; cin>>a>>b>>c>>d; word=&a; number=&b; fla=&c; str=&d; cout<<a<<'\t'<<b<<'\t'<<c<<'\t'<<d<<'\n'; cout<<word<<'\t'<<number<<'\t'<<fla<<'\t'<<str<<'\n'; cout<<*word<<'\t'<<*number<<'\t'<<*fla<<'\t'<<*str<<'\n'; return 0;}
输入:
输出:
A 0x7fff355ee59c 0x7fff355ee5a8 0x7fff355ee5a0
A 23 2.345 %zuzhang
#include <iostream> using namespace std;const int MAX = 3; int main (){ int var[MAX] = {10, 100, 200}; int *ptr; // 指针中的数组地址 ptr = var; for (int i = 0; i < MAX; i++) { cout << "var[" << i << "]的内存地址为 "; cout << ptr << endl; cout << "var[" << i << "] 的值为 "; cout << *ptr << endl; // 移动到下一个位置 ptr++; } return 0;}
当上面的代码被编译和执行时,它会产生下列结果:
var[0]的内存地址为 0x7fff59707adcvar[0] 的值为 10var[1]的内存地址为 0x7fff59707ae0var[1] 的值为 100var[2]的内存地址为 0x7fff59707ae4var[2] 的值为 200
#include <iostream> using namespace std;const int MAX = 3; int main (){ int var[MAX] = {10, 100, 200}; for (int i = 0; i < MAX; i++) { *var = i; // 这是正确的语法 var++; // 这是不正确的 } return 0;}
把指针运算符 * 应用到 var 上是完全可以的,但修改 var 的值是非法的。这是因为 var 是一个指向数组开头的常量,不能作为左值。
由于一个数组名对应一个指针常量,只要不改变数组的值,仍然可以用指针形式的表达式。例如,下面是一个有效的语句,把 var[2] 赋值为 500:
*(var + 2) = 500;
上面的语句是有效的,且能成功编译,因为 var 未改变。
- C学习——指针
- C++——指针学习
- C与指针学习笔记——函数指针
- C与指针学习笔记——有效的指针
- C语言学习——指针与数组、空指针
- C语言指针专题——为何要学习指针
- C语言学习笔记——指针
- 学习C++——函数指针
- C语言学习笔记——指针
- 【C++】学习笔记十——指针
- C语言再学习——指针
- C语言学习笔记——指针
- Linux 下C语言的学习(五)——指针的学习(数组指针,指针数组,数组退化)
- C——指针
- C++——指针
- C语言—指针
- c++—智能指针
- c指针学习——之字符串常量
- 1078. 字符串压缩与解压 (20)
- appium 报错总结一
- HTTP 状态代码列表
- BRDF双反射分布函数
- 洛谷P2536 [AHOI2005]病毒检测
- C++——指针学习
- 使用VMware安装linux虚拟机以及相关配置
- Deep learning:数据预处理技巧
- 基于注解的SpringMVC
- 代码传奇 | WWDC2017最小程序员6岁开始编程 已设计5款APP
- 痛心!中兴程序员跳楼始末:或成其公司内部矛盾牺牲品
- 荐书丨Java微服务实战(留言送书)
- js history
- java权限控制框架shiro