定义:
指针是一个整数,一种存储内存地址的数字
- 内存就像一条线性的线,在这条街上的每一个房子都有一个号码和地址
- 类似比喻成电脑,这条街上每一个房子的地址 是一个字节
- 我们需要能够准确找到这些地址的方法,用来读写操作
因此,指针就是这些地址。不要考虑类型,无论是什么类型的指针,都是用来保存地址的整数。
使用
int main() {
void* ptr = nullptr;
}
表示不在乎类型的空指针,我们无法对空指针进行读取和写入
int main() {
int var = 8;
void* ptr = &var;
}
用&符号取得var的地址,并赋给ptr
对程序进行Debug,可以得到var的值为8
,ptr的的值是0xfd183ffcc4
,本文使用的clion,在memory中输入,可以被带到内存区域。
总结来说,它本身不保存所谓变量的数字,指针就是一个保存地址的数,仅此而已
解引用
在指针前增加
*
可以进行解引用。
int main() {
int var = 8;
void* ptr = &var;
*ptr = 10;
}
上述代码有错误,因为将10赋值给*ptr
后,内存不知道该分配多少字节,是4?还是8?……
这时候就需要类型了,用来告诉编译器,他需要多少字节
int main() {
int var = 8;
int* ptr = &var;
*ptr = 10;
std::cout << var << std::endl; // 结果为10
}
可以看到编程0a,0a是十六进制的10
堆上创建
int main() {
char* buffer = new char[8];
//对指针进行操作
delete[] buffer;
}
- 我们知道
char
是1byte,上面这句话是告诉编译器,给我分配8个字节的内存, - 与此同时,返回了一个叫
buffer
的指针指向那块内存的开始位置。 - 在最后,我们需要使用
delete[] buffer
来删除指针。
指针的指针
int main() {
char* buffer = new char[8];
char** ptr = &buffer;
delete[] buffer;
std::cin.get();
}
简单来说指针的指针,就是定义一个新的指针,用来指向指针的地址。
标签:cherno,int,C++,buffer,var,main,ptr,指针 From: https://www.cnblogs.com/jackjie/p/17035065.html