一、内存
1、字节换算关系为:
1字位(bit)= 1个二进制数
1字节(Byte)= 8字位 = 8个二进制数
1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
b称为字位、B称为字节、KB称为千字节、MB称为兆字节、GB称为吉字节
一个汉字=2字节,中文标点=3字节,int整型=2字节,char字符型=1字节......
二、变量与内存
1、赋值给变量的真正含义
int i = 30; // 开辟一段两字节的内存空间,命名为i,假设i对应的地址编号为6,那么值30放在地址编号6的位置上
char a = 't'; // 开辟一段一字节的内存空间,命名为a,假设a对应的地址编号为8,那么值t放在地址编号8的位置上
2、取址符&
&i的含义:返回变量i的地址编号
#include <iostream>
using namespace std;
int main()
{
int i = 30;
cout << "&i = "<< &i << endl; // 输出00BFFCFC(其实就是上面假设的地址编号6)
cout << "i = " << i << endl; // 输出30
return 0;
}
三、指针
1、定义指针
int *pi; // 声明指针变量
pi = &i; // 赋值
另一种写法:int *pi = &i
2、指针变量
变量刚刚理解了,是存放值,指针用法一致,只不过其是存放内存的地址编号
pi = &i; // 开辟一段两字节的内存空间,命名为pi,假设i对应的地址编号为11,那么将i的地址编号即6放在pi的地址编号11的位置上
3、*pi
含义:获取pi内容(地址)的内容
pi的内容为6即i的地址编号,该地址编号对应的内容就是i的值即30
#include <iostream>
using namespace std;
int main()
{
int i = 30;
cout << "&i = "<< &i << endl; // 输出00BFFCFC(其实就是上面假设的地址编号6)
cout << "i = " << i << endl; // 输出30
int *pi = &i;
cout << "pi = " << pi << endl; // 输出00BFFCFC(其实就是上面假设的地址编号6)
cout << "*pi = " << *pi << endl; // 输出30
return 0;
}
四、指针与数组
1、使用指针遍历数组
#include<iostream>
using namespace std;
//使用指针遍历数组
int main()
{
int arr[5] = { 0, 1, 2, 3, 4 };
int *ptr = arr; // 注意数组arr表示的就元素的地址,所以此处不加寻址符&,理解成ptr = arr
for (int i = 0; i < 5; i++)
{
cout << *ptr << " "; // *ptr表示的是地址所指的元素,等同于arr[]
ptr++; // ptr表示的就是地址
//也可以直接写成 cout << *(ptr++) << " "; // 地址++
//也可以直接写成 cout << *(ptr+i) << " "; // 等同于arr[i]
}
return 0 ;
}