同学们好!
1kb=1024byte≈10^3byte
1mb=1024kb≈10^6byte
1gb=1024mb≈10^9byte
1tb=1024gb≈10^12byte
这些就是计算机内存的单位
然后是像long long,int之类的类型的长度:
long long:8位
int:4位
char:1位
string:32位
bool:1位
今天我们要学习的是关于指针的知识:
如图,可以看出a是一个变量
而p也是,但是应该有人会问:“这个‘p=&a’是什么意思呢?
答:&的意思就是取这个数据在电脑中的地址:0x7ffd98eec008。可是这个数又是什么东西呢?
它去掉0x之后就是一个十六进制数,0x7ffd98eec008=140727169237000
&=取地址
*=解地址
如果想把指针指向第一个(即0)的该怎么做呢?
答:int *a=&nullptr;即可
同时nullptr-t也是一个类型但是它和任何类型都不一样 只是在赋值时发生了自动类型转换。赋值时要注意:std::nullptr-t才可以对。赋值方法如下图:
接下来要讲关于临时值的知识:
下面这段代码对不对呢?
答:错。
因为a+b是一个临时值,它执行到*p=&(a+b);这里就没有了,它之后要取值的话就没有了。
同时临时值也可以叫右值,因为它一般都是出现在一个表达式的右边
那么由此也就可以推测出来:int a中的a是一个左值。
接下来要讲关于引用的知识
引用=偷懒版指针
引用的使用让我们改变指针所指的值变得方便。
c++直接交给cpu进行运行的是一种机器语言,但是c++上写的代码不可以直接运行
就需要一个叫做编译器的东西来编译(把c++翻译成机器语言)。
敲黑板!!!!!
接下来要讲关于const(常量,不可以改变)的知识:
int *const:指针指向方向不可以修改,但其值可以修改。
const int :指针不限,其指向的值不可以改变。敲黑板:int *const 必须在定义时初始化。
还有一种:const *const:指针指向方向不可以修改,其指向的值也不可以改变。const *const 也必须在定义时初始化。
思考题:
#include <cstdlib>
#include <iostream>
int main() {
const int a=100,b=100;
int *p=&b;
p=50;
std::cout<<p;
return 0;
}
下列代码是对的吗?
答:错的。因为b被const所形容,它不可以改变了。但是在p中我们却把b的值改掉了,所以我们必须向系统保证不会改这个数,否则不行。正确代码:
#include <cstdlib>
#include <iostream>
int main() {
const int a=100,b=100;
const int *p=&b;
std::cout<<p;
return 0;
}