有c语言基础就从老外的第3节开始看。指针
指针强类型
指针是强类型的,也就是说,需要知道这个指针是存的什么类型的地址,虽然就是一个8位的数来表示整数。
但是解引用的时候,需要知道要几个字节算一个数据。
同时,还和大端模式,小端模式有关系。
指针运算
指针运算,p++ p+5等表达式,到底加了几个字节呢?
p++: p的地址增加了 1 * sizeof(*p)个字节
p + 5: p的地址增加了5 * sizeof(*p)个字节
void*
泛型指针,万能指针。
int* p;
char* q = p;// 报错
void* q = p;//没有问题
char* r = q;//实现了int*到char*的转化
指针和一维数组
在线查看运行链接,主要注意第3种赋值的方法:可视化
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int main() {
int a[5] = {1,2,3,4,5};
//1. 1 is the same as 2.
int* p = a;
cout << p << endl;//0xfff000bc0
p++;
cout << p << endl;//0xfff000bc4
cout << *p << endl;//2
//2.
p = &a[0];
cout << p << endl;//0xfff000bc0
p++;
cout << p << endl;//0xfff000bc4
cout << *p << endl;//0xfff000bc2
//3.
//p = &a; invalid cannot convert 'int (*)[5]' to 'int*'
cout << &a << endl;//0xfff000bc0
cout << &a + 1 << endl;//0xfff000bc4
cout << *(&a + 1) << endl;//0xfff000bc4
// cout << **(&a + 1) << endl;// in valid
return 0;
}