首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

常量指针,指针常量的区别是什么_指针常量与常量指针

定义: 又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。...特点: 常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改; 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值; 指针还可以指向别处,因为指针本身只是个变量...指针所保存的地址可以改变,然而指针所指向的值却不可以改变 指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化; 表示形式: int* const p1; 三、两者区别 //——-...200; //OK,仍然可以通过原来的声明修改值,初始化的就给它分配地址,可以的(相当于分配初值); *p2 = 900; //OK,指针是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化...printf("p2的值=%d\n",*p2); *p2 = 100; //OK,指针是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化 printf("p2的地址=%p\n",p2

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

    指针常量和常量指针的区别_指针常量能指向常量吗

    在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。...用法如下: int a = 10, b = 20; int * const p = &a; *p = 30; // p指向的地址是一定的,但其内容可以修改 2、常量指针——指向“常量”的指针(const...,str指向”apple”,那么str指向的是字符串常量”apple”的首地址,也就是字符a的地址,因此str指向字符a,*str就等于字符a,对*str的修改就是对字符串首字符a的修改,但”apple...根据字符串赋值规则,可以修改整个字符串,方法是对指向字符串的指针str进行赋值,如下: str = "orange"; 但依旧是错误的,在该赋值语句中,系统会在常量区一块新的空间写入字符串”orange...”并返回其首地址,此时str由指向字符串常量”apple”的首地址变为指向字符串常量”orange”的首地址,str指向的地址发生了变化,但str是指针常量不能被修改,所以错误。

    1.9K20

    指针指向常量_常量指针的四种

    const关键字 指针常量和常量指针都离不开const关键字,我们先来了解一下什么是const关键字,const被用来定义常量,如果将一个变量加上const关键字,则被修饰的变量的值将无法改变。...下面是const修饰变量的用法: const int a = 6; 或者 int const a = 6; 此时变量a的值无法改变,只能访问,不能改写 指针常量 指针本身是一个常量,不能更改指针指向的地址...p = &a; *p = 200; // p = &b; 错 // p指针指向的地址不能更改为b的地址,否则是不对的 cout 指针p指向的值为:"...p指向的值为:200 a的值为:200 b的值为:200 常量指针 常量指针指的是一个常量,所以指针指向的值是不能改变的,但是指针指向的地址是可以改变的 #include using...:200 a的值为:100 b的值为:200 区别 注意指针常量和常量指针的区别,指针常量只能改变值,不能改变地址,常量指针只能改变地址,不能改变值。

    66610

    常量指针和指针常量的详解一样吗_指针是常量还是变量

    说一下 常量指针和指针常量 的区别。 常量指针   指向常量的指针,也就是说指针指向的对象是常量,指向的常量不能修改。指针不是一个常量, 可以把指针指向别一个常量。...不可以对指向的内容做修改: *p = 3; // 错误,常量指针不变的常量,如果指针指向了某个地址,在解引用后不能去修改指针变量的值 指针常量   指针指向的地址不可以改变,地址的内容可以通过指针改变...指针常量在定义时必须赋值。...不能对指向的地址进行修改: p = &b; // 错误,指针指向的地址不可以改变,地址的内容可以通过指针改变 我们也可以这样记 const 在谁前边谁就不可以修改: 常量指针 : const 在指针前边...指针常量 : const 在变量前边,我们就不可以修改指针的地址。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

    62620

    【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针

    解释: message是一个指向常量的指针,它指向一个字符串常量。 printString函数读取并打印字符串,但不能修改字符串的内容。 5....即使newValue的值为100,config指向的地址configPtr不变,因此输出为42。 6. 常见问题及解决方法 6.1 问题:如何处理常量指针和指向常量的指针的混用?...modifyArray函数使用普通指针修改数据。 数据在被修改后,processArray再次输出修改后的数据。 6.2 问题:如何避免常量指针和指向常量的指针的混乱?...常见问题和解决方案 9.1 问题:如何在大型项目中管理常量指针和指向常量的指针? 解决方案: 代码审查:定期进行代码审查,确保指针的使用符合设计规范。...9.2 问题:如何在C++中处理常量指针和指向常量的指针? 解决方案: C++特性:在C++中,可以使用const和constexpr来定义常量指针和指向常量的指针。

    20310

    【C 语言】内存四区原理 ( 常量区示例 | 不同函数返回的相同字符串的指针地址相同 )

    文章目录 前言 一、正常程序 二、获取相同的字符串内容 前言 C / C++ 编译器会对代码进行 词法分析 , 语法分析 , 句法分析 ; 然后对代码进行优化 ; 将 字符串常量 赋值给指针时 , 首先去...全局变量区 的 常量区 查询该 字符串常量是否存在 , 如果存在 , 直接使用该 字符串常量地址 赋值给 char* 指针 , 如果不存在 , 直接在常量区 创建一个新的字符串 , 然后将地址 赋值给...char* 指针 ; 下面的 2 个程序 , 分别演示 不同的字符串常量 和 相同的字符串常量 地址的区别 ; 一、正常程序 ---- 分别从两个函数中 , 获取两个不同的字符串 , 打印出这两个...字符串 内容 及 指针指向的地址 ; 代码示例 : #include /* * 函数1 返回字符串 1 */ char *get_str1() { char *p1...、获取相同的字符串内容 ---- 如果在 2 个函数中 , 获取的 字符串 是相同的字符串 ; 此时打印出两个函数的指针地址是相同的 , 这是因为 获取的 字符串 都是从 全局区 中的 常量区 中获取的

    3.7K10

    初识指针(指针和指针变量、如何理解地址、指针类型的意义、void*指针、野指针、空指针)(笔记)

    一、指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。...,指针变量并不完全等同指针, 但口头上 指针 一般是 指针变量 2.1指针变量的大小 1.指针变量是专门用来存放地址的,指针变量的大小取决于一个地址存放需要多大空间 32位机器上:地址线32根,地址的二进制序列就是...2.32位平台下地址是32个bit,指针变量的大小是4个字节 64位平台下地址是64个bit,指针变量的大小是8个字节 三、如何理解地址: 计算机中硬件单元要互相协同工作(协同:互相进行数据传递...*p);// return 0; } 如何规避野指针?...NULL 是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的,读写该地址会报错。

    19910

    【C 语言】字符串 一级指针 内存模型 ( 指定大小字符数组 | 未指定大小字符数组 | 指向常量字符串的指针 | 指向堆内存的指针 )

    文章目录 一、字符串 一级指针 内存模型 1、指定大小字符数组 2、未指定大小字符数组 3、指向常量字符串的指针 4、指向堆内存的指针 一、字符串 一级指针 内存模型 ---- #include 字符串 ; 在 全局区 的 常量区 中 , 存放 “123” 常量字符串 ; 在 栈区 的 array2 数组中 , 存放 “123” 字符串内容 , 注意最后的 \0 字符..., 该数组大小 4 字节 ; // 栈内存数组 不指定大小 char array2[] = "123"; 3、指向常量字符串的指针 在 栈内存 中 , 定义 局部变量 指针 p ,...没有为该指针分配内存 , 该指针指向 字符串常量 “def” ; 在 全局区 的 常量区 中 , 定义 字符串常量 “def” ; // 定义指针 , 使用字符串赋值 char *p...= "def"; 4、指向堆内存的指针 先在 堆内存 中 , 分配 5 字节内存 ; 然后 在 全局区 的常量区 中 , 定义 字符串常量 “456” ; 最后 将 字符串常量 “456” 拷贝到 堆内存

    2.4K20

    指针常量,常指针,指向常量的常指针(从我大一写的QQ空间迁移过来)

    1.指针常量 从字面意思可以看出,指针是一个常量,也就是地址不能被修改。 int* const p 特点是指针指向的数值可以改变,然而指针所保存的地址却不可以改变。...p所指向的内容,而不能改变p的地址空间,如 添加上p = &b;我们就会发现编译错误!...2.指向常量的指针 const int *p或者int const *p 特点是指针所保存的地址可以改变,然而指针所指向的值却不可以改变。...3.指向常量的常指针 const int const*p 特点是指针所保存的地址不可变,指针所指向的数值也不可变 4.空指针 顾名思义,就是保存地址为空的指针 int...所以此时指针p的指向地址具有不确定性,故而称作迷途指针,避免的方法是将指针初始化为空指针。

    24100

    jvm常量池和字符串常量池_常量池中的字符串是对象吗

    作为最常用也是最基础的引用数据类型,JVM为String提供了字符串常量池来提高性能,本篇文章我们一起从底层JVM中认识并学习字符串常量池的概念和设计原理。...字符串常量池由来 在日常开发过程中,字符串的创建是比较频繁的,而字符串的分配和其他对象的分配是类似的,需要耗费大量的时间和空间,从而影响程序的运行性能,所以作为最基础最常用的引用数据类型,Java设计者在...实现原理 为了提高性能并减少内存的开销,JVM在实例化字符串常量时进行了一系列的优化操作: 在JVM层面为字符串提供字符串常量池,可以理解为是一个缓存区; 创建字符串常量时,JVM会检查字符串常量池中是否存在这个字符串...在常量池中查找是否存在”123″这个字符串;若有,则返回对应的引用实例;若无,则创建对应的实例对象; 在堆中new一个String类型的”123″字符串对象; 将对象地址复制给str,然后创建一个应用。...,“cd”,“abcd”; 堆:无 栈:(3个引用)str1,str2,str3 总共:2个对象+3个引用 如何指向字符串池中特定的对象?

    53120

    【错误记录】C 语言中通过指针操作字符串常量出错记录 ( 只有 栈内存 或 堆内存 中的数据才能通过指针修改 | 不要通过指针修改常量区的字符串 )

    // 从两边向中间遍历 // 利用指向收尾的指针 , 交互指针指向的元素 while (p_start < p_end) { // 交换收尾字符...// 记录 p_start 指针指向的首部字符 char c = *p_start; // 将尾部字符赋值给首部字符 *p_start = *p_end;...// 将首部字符赋值给尾部字符 *p_end = c; // 指向头部的指针自增 p_start++; // 指向尾部的指针自减...char *str = "sdfsdfsdabc4548411abc"; 字符串导致 , 该字符串存储在 全局区 的 常量区 ; char *str 指针指向了 常量区 ; 之后 , 通过指针尝试修改该常量区的字符串..., 字符串在 栈区 和 常量区各有一份 , 可以任意修改栈区的字符串 , 常量区的字符串仅用于赋值操作 ; // 将下面的字符串翻转 char str[] = "sdfsdfsdabc4548411abc

    61410

    字符串常量池 运行时常量池_常量池中的字符串是对象吗

    变量拼接的原理是StringBuilder 如果拼接的结果调用intern()方法,根据该字符串是否在常量池中存在,分为: 如果存在,则返回字符串在常量池中的地址 如果字符串常量池中不存在该字符串,则在常量池中创建一份...所以最后s4的地址是一个String类的对象,而s3是字符串常量池当中的引用,最终结果为false。...在调用intern方法时,如果池中已经包含了由equals(object)方法确定的与该字符串内容相等的字符串,则返回池中的字符串地址。否则,该字符串对象将被添加到池中,并返回对该字符串对象的地址。...:使用的是上一行代码代码执行时,在常量池中生成的"11"的地址 System.out.println(s3 == s4);// jdk6:false jdk7/8:true }...对大量 Java 应用程序(大小)进行的测量显示如下: 对象占用的活动堆数据集的平均百分比String= 25% 重复对象占用的活动堆数据集的平均百分比String= 13.5% 平均String长度

    27120

    什么是字符串常量池_常量池中的字符串是对象吗

    String两种创建方式 方式一(str值和字符串常量池中字面量地址相等) String str = "abc" 检查字符串常量池是否存在该字符串,存在则不创建并且返回该字符串的引用 不存在则在字符串常量池中创建该字符串常量并返回其常量池中地址...== str.intern(); } 对于intern函数的理解 调用这个方法之后就是去看当前字符串是否在字符串常量池中已经存在引用 (1)存 在:那就直接返回该字符串在字符串常量池中所对应的地址给栈中要引用这个字符串的变量...(2)不存在: ① jdk 1.6:先在字符串常量池中创建该字符串,地址与堆中字符串地址不相同。然后再返回刚创建的字符串在字符串常量池中所对应的地址给栈中要引用这个字符串的变量。...② jdk 1.7及以后:直接将堆中(不是字符串常量池中)该字符串的地址复制到字符串常量池中,这样字符串常量池就有了该字符串的地址引用,也可以说此时字符串常量池中的字符串只是一个对 堆中字符串对象的引用...,它们两个的地址相同,然后再把这个地址返回给栈中要引用这个字符串的变量。

    48140

    指针、引用和常量的一些“故事”

    常量指针:常量“的”指针,指向常量的指针,所指内容是不能更改的(read-only),但指针本身是可以修改的    示例:const Object* objPtr、const int *iPtr   2...指针常量:指针“的”常量,即本身为常量的指针,所指向内容是可以修改的,但指针本身是不可以修改的   示例:Object* const objPtr、int * const iPtr   3. ...常量指针常量(好拗口~~~不知叫这名字是否确切):上述两者的结合,性质就是两者相加了   示例:const Object* const objPtr   4. ...引用本身即带有常量语义(类似int& const 的代码表述会引起编译错误),即你无法改变一个已经赋值的引用本身,类似的赋值操作所改变的仅是引用所引用(指向)的数据,并不改变引用本身,所以引用非常类似指针常量...对于常量类型的结构类型而言,其内部成员都带有常量语义,即int会变为int const(或者可以认为为const int),但是指针类型的内部成员则只能认为为Object* const,而并不是const

    60010

    Java中的常量池【Class常量池、运行时常量池、字符串常量池】

    在解析阶段,会把符号引用替换为直接引用,解析的过程会去查询字符串常量池,也就是StringTable,以保证运行时常量池所引用的字符串与字符串常量池中是一致的。...字符串常量池 字符串常量池在Java内存区域的哪个位置? 在JDK6.0及之前的版本,字符串常量池是放在Perm Gen区(也就是方法区)中; 在JDK7.0版本,字符串常量被移到了堆中。...在之前版本中,里放的都是字符串常量 在中,由于发生了改变,因此中也可以存放放置在堆内的字符串对象的引用。...⚠️字符串常量池中的字符串只存在一份,且被所有线程共享 ⚠️全局字符串池里的内容是在类加载完成,经过验证、准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到中;中存的是引用值而不是具体的实例对象...在JDK1.7字符串常量池和静态变量被从方法区拿到了堆中,运行时常量池剩下的还在方法区,也就是HotSpot的永久代中。

    1.7K20

    【面试题精讲】Java字符型常量和字符串常量的区别?

    ★ 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top ” Java 中的字符型常量和字符串常量是两种不同的数据类型。...字符型常量:字符型常量是由单个字符组成的,用单引号括起来。例如:'A', 'b', '1'等。在内存中,字符型常量被表示为对应的 Unicode 编码值。...字符串常量:字符串常量是由多个字符组成的,用双引号括起来。例如:"Hello", "World"等。在内存中,字符串常量以字符数组的形式存在,并且每个字符都有一个对应的 Unicode 编码值。...长度不同:字符型常量只能包含一个字符,而字符串常量可以包含任意数量的字符。 内存表示不同:字符型常量在内存中占用 2 个字节,字符串常量在内存中以字符数组的形式存在。...操作方法不同:字符型常量可以进行一些基本的字符操作,如比较、转换大小写等;字符串常量则可以进行更复杂的字符串操作,如连接、截取、替换等。

    20960
    领券