一文带你彻底搞懂C++中一些常见指针(形如*p)的用法
程序员文章站
2022-04-19 22:31:47
...
提高指针效率以及程序可读性
为什么要后置运算符?
有C语言编程经验的人可能会感到疑问,为什么在C++里面我们推荐优先使用运算符的前置版本,就是把运算符号放在变量的前面,前置版本的递增避免了不必要的工作,它将值加一后直接返回了,而如果你后置运算符,它会把原始值存储下来以便于返回这个未修改的值。
简洁可以成为一种美德
cout<<*ip++<<endl;
cout<<*ip<<endl;
++*ip;
表达的意思都是一样的,大多数C++程序追求简洁
什么是指针
数据在内存中的地址也称为指针,如果一个变量存储了一份数据的指针,我们就称它为指针变量。
指针表达
#include <iostream>
using namespace std;
int main () {
int var = 20; // actual variable declaration.
int *ip; // pointer variable
ip = &var; // store address of var in pointer variable
cout << "Value of var variable: ";
cout << var << endl;
// print the address stored in ip pointer variable
cout << "Address stored in ip variable: ";
cout << ip << endl;
// access the value at the address available in pointer
cout << "Value of *ip variable: ";
cout << *ip << endl;
return 0;
}
输出如下:
$g++ -o main *.cpp
$main
Value of var variable: 20
Address stored in ip variable: 0x7ffe8c789054
Value of *ip variable: 20
var前面加上了取地址符号,采用拷贝赋值的方式给ip,此时ip代表的就是存放var的地址。
符号 | 含义 |
---|---|
*p | 我对你地址是多少不关心,我关心的是你里面存放的内容 |
p | 我对你里面的内容不关心,我关心的是你的地址 |
这里我们在和上文中提到的运算符号结合,做一个延伸
符号 | 含义 |
---|---|
* (++p)与*p++ | 将指针的值加一后在去探寻地址里面到底放了什么东西 |
++(*p) | 将地址里面放的东西的值加1 |
值得一提的是,我们在C++里要尽可能使用运算符号前置来提高程序运行的效率
指针与const
const指针(底层const)
指针不仅可以指向变量,也可以指向常量const,指向常量的指针不能改变所指对象的值,但指针自己的值却可以改变(即指向别的地方)
顶层指针
指针自己就是一个常量,但这并不意味着它不能改变所指对象的值,就好比你有一把唯一的钥匙去打开唯一的一扇门,不能打开其他的门,但只要你打开了这扇门,你就可以修改里面的东西了。
上一篇: Sprng boot + Spring security整合
下一篇: JDK5.0的新特性