一文带你彻底搞懂C++中一些常见指针(形如*p)的用法

提高指针效率以及程序可读性
为什么要后置运算符?

有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,指向常量的指针不能改变所指对象的值,但指针自己的值却可以改变(即指向别的地方)

顶层指针

指针自己就是一个常量,但这并不意味着它不能改变所指对象的值,就好比你有一把唯一的钥匙去打开唯一的一扇门,不能打开其他的门,但只要你打开了这扇门,你就可以修改里面的东西了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作封装在对象,通过对象之间的交互实现程序的设计和开发。下面是一些关键概念,帮助你更好地理解Python面向对象编程。 1. 类(Class):类是对象的蓝图或模板,描述了对象的属性和行为。它定义了对象的特征和方法。例如,我们可以定义一个名为"Car"的类来表示汽车,其包含属性(如颜色、型号)和方法(如加速、刹车)。 2. 对象(Object):对象是类的实例,是具体的实体。通过实例化类,我们可以创建一个对象。例如,我们可以创建一个名为"my_car"的对象,它是基于"Car"类的实例。 3. 属性(Attribute):属性是对象的特征,用于描述对象的状态。每个对象都可以具有一组属性。例如,"Car"类的属性可以包括颜色、型号等。 4. 方法(Method):方法是对象的行为,用于定义对象的操作。每个对象都可以具有一组方法。例如,"Car"类的方法可以包括加速、刹车等。 5. 继承(Inheritance):继承是一种机制,允许我们创建一个新类(称为子类),从现有类(称为父类)继承属性和方法。子类可以扩展或修改父类的功能。继承可以实现代码重用和层次化设计。 6. 多态(Polymorphism):多态是一种特性,允许不同类的对象对同一方法做出不同的响应。多态提高了代码的灵活性和可扩展性。 7. 封装(Encapsulation):封装是一种将数据和操作封装在对象的机制,隐藏了对象的内部实现细节,只暴露必要的接口给外部使用。这样可以保护数据的安全性,提供了更好的模块化和代码复用性。 通过理解这些概念,你可以更好地掌握Python面向对象编程。在实践,你可以使用类来创建对象,操作对象的属性和调用对象的方法,通过继承和多态实现代码的灵活性和可扩展性,通过封装保护数据的安全性和提高代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值