首页
友情链接
点点滴滴
关于本站
秋码记录
一个游离于山间之上的Java爱好者 | A Java lover living in the mountains
累计撰写
142
篇文章
累计创建
317
个标签
累计创建
46
个分类
栏目
首页
友情链接
点点滴滴
关于本站
搜索
分类
c/c++
不说是彻底搞懂,至少让你不再惧怕c/c++指针,以及各种奇葩指针变种
经历过C/C++的Coder,说起指针,无不是摇头晃脑的。 然而,没弄懂指针,可以说是无法在C/C++世界里徜徉,毕竟指针可是C/C++的灵魂所在。 由于C/C++的Coder可以通过指针自由玩转内存,从而让外界给C/C++戴上了一顶内存不安全的语言。 相较于现代语言,诸如,Java、golang、python、PHP等这些具有垃圾回收机制的语言来说,C/C++把操控内存的主动权交给了Coder,之所以会被誉为内存不安全的语言,其最大责任便是Coder使用指针不当而引发内存崩溃。 什么是指针呢? 对于初学者而言,到底什么是指针(pointer)呢?我们光从字面上就大抵能猜出个一二,指针,指针,无非就是一个事物指向另一个事物。 说起指针,便无法抛开内存而不谈。 我们知道数据(Data)+ 算法(algorithm)= 程序(program),那么程序的本质就是在操控数据,而内存便是存放数据(这里存放数据,不要与数据库存放的数据混淆了。) 由于变量的类型和作用域所限制,内存可分为:堆(heap)、栈(stack)、全局(global)以及静态存储(static)。 无论是C/C++,抑或是Java等其他高级语言,最终都是要编译成汇编语言,而这种语言它可不管你为变量起了个多么好听的名字,在它那里统统都转变成了内存寻址。 而指针便是存放着某一块的内存地址,可以是某个基础类型变量的地址,也可以是复合类型变量的地址,甚至还可以是指针的地址。 #include <iostream> using namespace std; int main() { int a = 10; int* ptr = &a; //声明一个int类型的指针,并指向变量a的地址 cout << "变量 a 的地址=" << &a << endl; cout << "指针变量 ptr 存放着变量 a 的地址=" << ptr << endl; cout << "通过 * 解引用操作,间接获得变量 a 的值=" << *ptr << endl; *ptr = 15; //通过 * 解引用操作,来修改指针指向的内容。 cout << "通过 * 解引用操作,间接修改变量 a 的值=" << a << endl; return 0; } 数组名就是指针 在初步了解了什么是指针的前提下,我们将继续探讨下一个话题,数组与指针到底有着怎样的联系呢?
2024-11-29
[c/c++]