首页
学习
活动
专区
圈层
工具
发布

const int *p 和 int *const p的区别

在 C++ 中,const int *p 和 int *const p 是两种不同的指针声明方式,它们的核心区别在于 const 修饰的对象不同,导致指针的行为不同。...以下是详细对比: 1. const int *p(或 int const *p) • 含义: • 指针 p 可以指向不同的内存地址。 • 不能通过 p 修改其指向的数据(数据是常量)。...组合形式:const int *const p • 含义: • 指针 p 的地址不可变。 • 也不能通过 p 修改其指向的数据。...实际应用场景 const int *p: void printData(const int *arr, int size) { // 保证函数内不会修改 arr 指向的数据 for (int...ptr = buffer; // ptr 始终指向 buffer 首地址 *ptr = 1; // 允许修改数据 掌握 const 与指针的组合使用,能有效提升代码的安全性和可读性

7400

double &operator(int i)const区别

double &operator[](int i); double operator[](int i)const; 要操作数组中的元素当然是第一个。 要给一个变量赋值。就是第二个了。...所以double operator[](int i)const;声明了函数不修改类中变量,但这个函数只是返回一个值,不能做左值。...写成 double & operator[](int i)const;比较好 const放在这个位置标示返回的值是常值,即返回值不允许改变 &表示返回的是原来的变量的引用 正常情况下应该是第一个函数的形式...,应该返回一个引用,并且该引用的值时允许改变的 比如 int a[] = {1,2,3,4,5,6}; 你可以写 int b = a[3];//这个时候返回值或者引用都可以满足结果 a[3]...a[3] = 5; 这里用的是double & operator[](int i); double x = a[3]; 这里用的是double operator[](int i)const;

60920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言】int main(int argc, const char *argv[])到底是什么?

    我们在C语言中经常看到的main函数都是不带参数的,因此main函数后面都是空括号,形如 int main() 这类。但实际上main函数是可以带参数的,这个参数可以认为是main函数的形式参数。...C语言规定main函数后面的参数只能有两个,习惯上写成argc和argv。所以就出现了标题上见到的形式:int main(int argc, const char *argv[])。...argc 第一个形参argc必须是整型变量,代表命令行总的参数个数。 argv 第二个形参argv必须是是指向字符串的指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。...示例 给一个如下的C语言程序,叫做test.c #include #include #include int main(int argc..., const char *argv[]) { if(3 > argc) { printf("请喂我更多的参数啦!")

    2.8K61

    指针讲解:*&p和&*p 及const的用法总结

    首先要明白,指针和地址是一个概念;然后明白指针和指针变量的区别。 先理解地址和数据,想象内存里面是一个个的小盒子,每个盒子对应一个编号,这个编号就是地址,盒子里存放的就是数据。...*p和**p的区别 int *p :一级指针,表示p所指向的地址里面存放的是一个int类型的值 int **p :二级指针,表示p所指向的地址里面存放的是一个指向int类型的指针(即p指向的地址里面存放的是一个指向...int b = 5; int c = 3; const int *p=&b; *p=6; //错误,不能通过指针修改所指向的值; p=&c; //正确,可以修改指针的值 (2)int * const p...7、const和#define的区别 #define A 10 const int A=10; 上面两条语句的作用是一样的,但是后面一条语句可以节省内存空间,这是为什么呢?...8、const和extern file1.cpp中, const int a; file2.cpp中, extern int a; //错误,无法调用, 说明const修饰大的变量只能在该程序的本文件中使用

    68110

    C语言中修改const int 定义的常量()

    真正让我懂了的解释: volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。...而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中。而不是重新从i里面读。...本来想测试第一次代码就写错 const int a=1; int *b = &a; 这样写会报错,因为a是常量所以不会让你去到地址应该用(int *)强制取其地址 //这次虽然定义对了,但是会发现...a和*c的值却不一样是因为进行了优化直接重上次取得值取得(从上边的解释中可以懂的) #include int main(void) { const int a=1;...//这次的结果都一样了 #include void b(int *a) { *a=*a+1; } int main() { volatile const int a=

    1.8K20

    int和int32的区别_int float double char区别

    的别名,是等价的,short,long同理也是别名 详解Int32 为什么Int32 就等于 int, 很简单,在VS中写 int a=1; 选中a , F12转到定义就是System.Int32....但是一共还是能存储2^32次方 既42,9496,7296个数,因为有正负数,其实一样的,还是2的32次方个数 如图: 所以Int16和Int64也是同理的。...,Uint64等表示 跟上面同理 ushort =UInt16 uint =UInt32 ,0 ~ 4364967295 ulong =UInt64 UInt32和Int32一样 ,也是代表一共能存储...2^32次方,一共有42,9496,7296个数 但是因为只有正数和0,所以最大值为4364967295, 既2^32-1,-1是因为0占了一个数 溢出会如何 更进一步,尝试Int32 a=Int32...参考: https://www.cnblogs.com/EEEE1/p/8098876.html https://www.cnblogs.com/raytheweak/p/7290617.html 未完待续

    2.4K50

    int和int32的区别_int是多少位的

    大家好,又见面了,我是你们的朋友全栈君。 大家有没有写了很久代码,还不知道这个Int8,Int16, Int32, Int64有什么区别呢?或者是为什么后面的数字不一样呢?...先来扫盲一下计算机存储单元,   在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。...各种存储设备存储容量单位有KB、MB、GB和TB等几种 计算机的基本的存储单元有:   位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。...而Int8,Int16,Int32,nt64,后面的数字就代表这个数据类型占据的空间。 Int8, 等于Byte, 占1个字节.  ...转载于:https://www.cnblogs.com/daguonice/p/11193884.html 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170542

    3.5K20

    let、const和var的区别是什么?

    在JavaScript中,let、const 和 var 是用于声明变量的三种关键字。虽然它们的功能相似,但在作用域、提升、可变性以及使用方式等方面存在显著差异。...理解这些差异对于编写高质量、可维护的代码至关重要。本文将详细探讨这三种关键字的区别。 一、var 的特点 1. 作用域 var 声明的变量具有函数作用域(function scope)。...成为全局对象的属性 不会成为全局对象的属性 不会成为全局对象的属性 五、最佳实践 使用 let 和 const:一般建议使用 let 和 const,避免使用 var。...const 应该作为默认选择,除非需要在后续代码中重新赋值。 块作用域:利用 let 和 const 的块作用域来减少变量的生命周期,提高代码的可读性。...避免全局变量:尽量避免在全局作用域中使用 var,以减少潜在的命名冲突和污染。 使用 const 来声明常量:对于不会被重新赋值的变量,使用 const 来表明它的不可变性。

    24510

    还分不清int(5)和int的区别?

    我觉得对于刚学习mysql的人来说,或者甚至工作了几年的人来说,对于int(5),这个5的含义说不出来的大有人在,下面我们就来解释一下。 int(5)中的5的意思是显示宽度,显示宽度又是什么意思呢?...,no没有设置,我们看出又有一个UNSIGNED,这又是什么玩意,其实只要我们设置了ZEROFILL,那么UNSIGNED就自动设置了,UNSIGNED就是无符号位,意思就是不能带有符号位,说白了就是最小值为...0,ZEROFILL字面意思是零填充,当设置了这个值以后,如果位数不足,则用0来补,位数足或超出设置的这个位数,按int范围内的值正常显示。...由此我们可以看出,其实int(5) 和 int并没有什么区别,他们之间要有区别,还得建立在设置ZEROFILL的基础上,如果不设置ZEROFILL,那么两个没区别 不过你可能会疑惑了,既然使用了ZEROFILL...` 下面我们看一下mysql整型的种类和取值范围,有符号位的最小值为0,无符号位的最小值为负数,并且最小值的绝对值加上最大值等于有符号位的最大值,公式 |min| + max = UNSIGNED

    1.6K20

    CC++对bool operator const p &a)const的认识,运算符重载详解(杂谈)

    运算符函数的定义与其他函数的定义类似,惟一的区别是运算符函数的函数名是由关键字operator和其后要重载的运算符符号构成的。...它只能和用户自定义类型的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象混合使用时。...但是,这样的运算符函数访问类的私有和保护成员时,必须使用类的公有接口中提供的设置数据和读取数据的函数,调用这些函数时会降低性能。可以内联这些函数以提高性能。)   ...(void*p); 5 void operator delete(void*p, int i, int j); 6 void operator delete [](void* p); 9...); 8 operator const char () const; 9 operator short int () const; 10 operator long long

    2.7K61

    MySQL的int (10) 和 int (11) 的区别

    那取值范围和显示宽度到底有什么关系呢?...如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。 同理,所以 int (10) 和 int (11) 无任何区别,就是显示宽度不同。...在存储方面确实没什么不同,设置长度只有在设置了自动填充 ZEROFILL 的时候才体现出来, 比如 id=1 长度为 int (5) 的话会显示 00001。...Mysql 可以为整数类型指定宽度,例如 INT (11),对大多数应用这是没有意义的:他不会限制值的合法范围,只是规定了 Mysql 的一些交互工具,如 Mysql 命令行客户端,用来显示字符的个数。...对于存储和运算来说, INT (1) 和 INT (8) 是相同的。 是的,设置自动填充的时候用来显示补充0有点 用而已

    2.1K30

    int *p定义一个名叫*p的变量,这样理解正确么?

    一般形式 类型名 *指针变量名; 大部分人初学C语言的时候遇到:int p,则理解为定义了一个int类型的变量p。...因此到指针的时候,很容易也理解:int *p,是一个int类型的*p变量,这种说法实际上是错误的。...int *p,其中p只是变量的名字,int *表示p变量存放的是int类型变量的地址,而不是一个int类型的*p变量。 指针就是一个地址,地址就是一个指针。...所谓int *类型,实际上就是存放int变量地址的类型,而地址则是内存单元的编号。...还有一点需要注意,指针和指针变量是两个不同的概念,我们平时习惯性说的指针,实际上是指针变量,指针只是一个地址,没有其他含义。 建议初学者学习的时候,直接说清楚学的是指针变量还是指针,避免说多混淆概念。

    1.2K3129

    uint和int的区别_int32和uint32

    注意: go语言中的int的大小是和操作系统位数相关的; 如果是32位操作系统,int类型的大小就是4字节; 如果是64位操作系统,int类型的大小就是8个字节 1、测试不同int类型占用字节数大小...) { fmt.Println("不同int类型占用的字节数大小:") var i1 int = 1 var i2 int8 = 2 var i3 int16 = 3 var i4...: 8 1.2、测试无符号int类型 func TestUIntSize(t *testing.T) { fmt.Println("不同无符号int类型占用的字节数大小...类型的取值范围 2.1、测试有符号int情况 func TestIntRange(t *testing.T) { // 不同int类型的取值范围 fmt.Println..., math.MaxInt64) fmt.Println() } 测试结果: 不同int类型的取值范围: int8: -128 ~ 127 int16: -32768 ~ 32767 int32: -

    1.7K20

    c++的const和static区别

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。     static表示的是静态的。...类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。...      在C++中,const成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。  ...const数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。...所以不能在类的声明中初始化const数据成员,因为类的对象没被创建时,编译器不知道const数据成员的值是什么。       const数据成员的初始化只能在类的构造函数的初始化列表中进行。

    17200
    领券