首页 > 编程语言 >C/C++ const关键字 解读

C/C++ const关键字 解读

时间:2023-09-22 20:03:33浏览次数:39  
标签:const reference int data modify C++ 关键字 pointer

The collocation between const and original pointer is confused to many people. There are two usages of it. The first one is a variable pointer that points a constant data. i.e. const int* p

#include <iostream>

int main() {
	int a = 1, b = 2;
	const int *p = &a;

	p = &b;  // true
	*p = 3;  // false

	return 0;
}

The second one is a contant pointer that points a variable data. i.e. int* const p

#include <iostream>

int main() {
	int a = 1, b = 2;
	int* const p = &a;

	p = &b; // false
	*p = 3; // true

	return 0;
}

There is a good way to distinguish these two usages. You can judge them by the position of const and *.

  • If the const locates the left of the *, it means that the const keyword modifies the data *p, i.e. a constant data.
  • If the const locates the right of the *, it means that the const keyword modifies the data p, i.e. a constant pointer.

In addition, const can also collocates with C++ reference. But there is a litter difference between them. That is because the difference between pointer and reference, which is that you can modify pointer pointing later, but you can't modify a reference pointing. So there is no such situation that you modify the reference. You can just modify the data which is pointed by the reference. Therefore, there is only one usage of reference, that is the const locates the left of the &. i.e. const int &p or int const &p.

标签:const,reference,int,data,modify,C++,关键字,pointer
From: https://blog.51cto.com/u_14882565/7570570

相关文章

  • C++ STL 容器简单讲解
    STL简单讲解网上有很多很好的资料可以参考而直接看标准是最准确清晰的vectorstackqueue/priority_queuedequearraymap/multimapset/multisetunordered_mapunordered_set关于指针和迭代器!!!pbds……本文默认认为读者会基本的STL应用。一切STL......
  • 05_其他关键字
    其他关键字const只读只能初始化,不能赋值,只读register寄存器如果变量被高频使用,会自动将变量存储在寄存器中,目的:提高访问效率如果用户想将变量直接放入寄存器中,可以使用register修饰寄存器变量volatile强制访问内存volatileintdata=0;//访问data强......
  • c语言-关键字static
    局部变量:运行周期=函数的运行周期全局变量:运行周期=整个程序的运行周期(程序可以是多个.c文件组成)static可以修饰:1、局部变量(函数内定义的)2、全局变量(函数外定义的) 3、函数1.修饰局部变量->静态局部变量:开辟存储空间。在编译的过程中,会在数据区为该变量开辟空间,并对其进行......
  • C++ | 关键字 explicit
    假如有一个类如下:classpoint{public:intx,y;Point(int_x=0,int_y=0){x=_x,y=_y;}};如果以下面两种方式初始化该类的对象:voiddisplayPoint(constpoint&p){printf("(%d,%d)\n",p.x,p.y);}voidmain(){displayPoint(......
  • IfcConstraint
    IfcConstraint实体定义IfcConstraint用于定义可应用于对象或特性值的约束或限制值或边界条件。 约束可以细分为用户定义的约束和系统定义的约束。用户定义的约束由用户应用,并且仅限于对象特性等高级定义。系统定义的约束可以应用于任何对象属性,通常由应用程序定义以强制执行......
  • c++ chat* 转 wchar*
    wchar_t*charToWchar(constchar*src){size_tsize=strlen(src)+1;wchar_t*dest=newwchar_t[size];size_toutSize;mbstowcs_s(&outSize,dest,size,src,size-1);returndest;} stringwstr2str(constwstring&wstr)......
  • c++ struct
    将数组中元素赋值给struct中元素(类型需一致,否则保持默认值),若数组元素少,struct中未被赋值的保持默认值。若数组元素多,对应位置的元素会赋值给struct。#include<iostream>structMyStruct{shortn1;//默认0shortn2;};intmain(){uint16_tnArray[4]=......
  • C++ 智能指针概述
    原始指针要想了解智能指针,就需要首先了解原始指针的痛点,原始指针有几点问题忘记释放内存->产生内存泄漏在尚有指针引用内存的情况下释放内存(使用已经释放掉的对象)->产生引用非法内存的指针同一块内存释放2次智能指针的产生本质上都是为了解决这些问题关于使用new动态分......
  • 4.7 Java this关键字详解(3种用法)
    this关键字是 Java 常用的关键字,可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。下面我们根据示例分别讲解this关键字的作用。this.属性名大部分时候,普通方法访问其他方法、成员变量时无须使用this前缀,但如果方法里......
  • C++系列十:日常学习-进程间通讯
    目录前言介绍照片:后续:前言V~~~V。介绍进程间通讯(Inter-ProcessCommunication,IPC)是操作系统中的一个重要概念,用于不同进程之间的数据传输和交互。有多种方式可以实现进程间通讯,以下是其中一些常见的方式:管道(Pipe):管道是一种单向通信方式,通常用于具有父子关系的进程之间。它分......