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

C++ 指针常量与常量指针

,举个例子: int a = 5; const int* p = &a; a = 4;//合法 *p = 3;//不合法 由于这个特点,通常把const int* p的形式作为函数的参量,以表示函数不会用这个指针修改数据...,比如我们有一个子函数是想打印一个数组,那么我们可以将函数声明写成这样: void printfarr(const int *arr,int n); 如此,当主函数中调用该子函数,并打印主函数中的变量array.../合法 p = &b;//不合法 以上就是所谓的指针常量与常量指针所包含的概念,在这里标个号: 1,2暂时称为第一类,3暂时称为第二类,那么第一类和第二类到底哪个叫做指针常量,那个叫做常量指针呢?...说实话我都不知道指针常量与常量指针的叫法是不是够官方,我只能说概念非常混淆,而且其实它的两个名字并不重要,关键的是声明方式与作用的区别。...但是在《C Primer Plus》中将第一类叫做指向常量的指针,也就是在文章开头提到的pointer to const,那么第二类也就是const pointer了,但是这样一来,他就已经和百度百科的说法反了

1.7K70

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

常量指针 vs. 指向常量的指针 在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。...例如,在库函数设计中,你可能会使用指向常量的指针来读取数据,同时使用常量指针来避免函数内部修改传入的地址。这种方式能有效提高函数的灵活性和安全性。...9.2 问题:如何在C++中处理常量指针和指向常量的指针? 解决方案: C++特性:在C++中,可以使用const和constexpr来定义常量指针和指向常量的指针。...constexpr提供了更强的编译时常量保证。 类成员:在C++类中,可以使用常量成员函数来确保对象状态不被修改。...结束语 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言中常量指针和指向常量的指针有了更深入的理解和认识。

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

    C++:18---const关键字(附常量指针、指针常量、常量指针常量)

    int b=a; //正确const int c=10; //正确 ③const修饰的变量可以赋值给其他值 const int a=10;int b=a;//正确 ④可以有常量引用 int a=10...②其他文件的全局变量会报错,显示重定义 方法: 在demo.h文件中extern const int a;//声明 在demo.c文件中extern const int a=1;(extern可省略)...指向可以改,但是不能通过该指针改变所指向的值 这种类型的const也被称为“底层const”:表示指针所指向的值是个常量 指针常量:(指针的常量)。...) 不可以改变指针常量的指向,因为指针自身是个常量 int a = 1;const int b = 2;int c = 3; int* const pa = &a; //正确,a是非常量int* const...pb = &b; //错误,b是常量 *pa = 10; //正确,可以修改指向对象的值pa = &c; //错误,不能修改pa的指向(因为指针自身是个常量) 常量指针常量,有如下规则: 可以使用常量

    1.4K10

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

    定义: 又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。...特点: 常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改; 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值; 指针还可以指向别处,因为指针本身只是个变量...指针常量的值是指针,这个值因为是常量,所以不能被赋值。 特点 它是个常量!...指针所保存的地址可以改变,然而指针所指向的值却不可以改变 指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化; 表示形式: int* const p1; 三、两者区别 //——-...//p2 = &b; //Error,因为p2是const 指针,因此不能改变p2指向的内容 补集一个: //——-指向常量的常量指针——-// const int* const p3 =

    1.2K30

    c++常量指针和指针常量_指针指向二维数组

    ** 一:常量 ** 常量指针,指针常量,常量指针常量 a)常量定义:不可修改的值,例如250,’A’ b)const关键字功能:将变量常量化,四种形式 (1)const可以修饰普通变量,一旦修饰该变量...,该变量就当做常量看待,不可再更改 Const int a=250;//将变量a常量化 A=200;//gcc编译器报错 (2)常量指针:不能通过指针变量来修改指向的内存区域的数据,主要目的是保护数据不可篡改...;//gcc编译报错 (3)指针常量(不太用) 指针永远指向一块内存区域,不能再指向别的内存,但是可以修改指针内存的值 例如: int a=100; int * const pa=&a;//定义指针常量...*pa=300;//可以 printf("a=%d\n",*pa); int b=200; *pa=&b;//不可以,gcc报错 printf("a=%d\n",*pa); (4)常量指针常量:指针本身和指向的内容都不可修改...1字节,2字节数据 //2、获取一字节数据 char *p1=(char *)&a;//将a的int型指针强制转化为char类型的指针 printf("a=%#x\n",*p1++);//0x78

    73620

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

    大家好,又见面了,我是你们的朋友全栈君。 1、指针常量——指针类型的常量(int *const p) 本质上一个常量,指针用来说明常量的类型,表示该常量是一个指针类型的常量。...在指针常量中,指针自身的值是一个常量,不可改变,始终指向同一个地址。在定义的同时必须初始化。...int *p, int const *p) 常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。...在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。...错误,指针常量不能在定义后赋值 const int * const ptr6 = &m; // 指向“常量”的指针常量,具有常量指针和指针常量的特点,指针内容不能改变,也不能指向其他地方,定义同时要进行初始化

    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

    【C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )

    出现在 * 左边时, 指针指向的数据为常量, 指向的数据不可改变; 右指 ( 指针常量 ) : const 出现在 * 右边时, 指针地址本身是常量, 指针地址不可改变; 指针常量 : 表示该指针本身是一个常量...; 常量指针 : 表示指向一个常量的指针 ; IV ....; 这里注意 , 不同通过引用进行修改 , 但是可以通过变量名称 a 进行修改 ; ⑤ 作用及意义 : 使用 引用数据类型 作为 函数参数 , 如果不需要在 函数中 修改该引用变量的值 ( 指针指向的数据的值...引用作为参数 ---- C 语言中的参数 分类 : ① 普通变量参数 : C 语言中 普通变量 ( 非指针变量 ) 作为参数 , 只能进行值传递 , 不能通过参数返回结果 ; ② 指针变量参数 : C...语言中 , 如果要让函数的参数可以将结果返回 , 则必须使用指针作为参数 ; C++ 中的引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数的情况 ,

    1.2K10

    C语言(函数指针和指针函数)

    ① 函数指针 ② 指针函数 ③ 数组指针 ④ 指针数组 还有个找抽的:⑤ 函数指针数组 经翻阅小学五年级语文课本得知,一个短语中的最后部分,是这个短语的中语,其余部分是定语(修饰语)。...也就是说,以上短语相当于: ① 指向函数的指针 ② 返回指针的函数 ③ 指向数组的指针 ④ 放了很多指针的数组 ⑤ 放了很多指向函数的指针的数组 ? 语文课上完了,然鹅,没用!...初学者们的福音到了,以上那些渣渣是这样的: ① 函数指针 p int func(char , double); // 一个普通函数 int (*p)(char, double); // 一个指向以上函数的指针...p = &func // 让 p 指向函数 func ② 指针函数 func char * func(int, float); // 一个返回指针的函数 ③ 数组指针 q int num[10]; /...char* 指针的数组 ⑤ 函数指针数组 fs void func(double, int); // 一个普通函数 void (*fs[3])(double, int); // 一个存放了 3 个指向以上函数的指针的数组

    1.7K20

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

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

    62620

    【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

    一、常量成员函数 1、const 修饰成员函数分析 在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定义了 void fun(int...void fun(int age, int height) const const 修饰的是 fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 ; C++ 编译器会将 void..., 其本质是修饰 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 ; 将 void fun(int age, int height) const 转换为 C 语言代码为...函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int age...fun 函数的 第一个参数 Student* pThis 指针指向的内存空间 和 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int

    22920

    C++函数指针、指针函数、返回值为函数指针的函数浅谈

    C++函数指针、指针函数、返回值为函数指针的函数浅谈 引言 函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。...而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。 函数指针 函数指针是一种特殊的 指针,它指向函数的入口。...endl; return 0; } 指针函数 指针函数是一种返回值为指针的 函数。...0; } 返回值为函数指针的函数 其实在搞懂了函数指针和指针函数后,这个概念并不难懂,其实这就是一个复杂一点的指针函数,因为他的返回值为函数指针。...先给一个例子: /* *本例是SGISTL源码中的一个函数,比普通的返回值为函数指针的函数要更复杂一点 *因为本例中函数的参数也是一个函数指针 */ void (* set_malloc_handler

    1.6K10

    C语言指针函数和函数指针区别

    大家好,又见面了,我是你们的朋友全栈君。 C语言函数指针和指针函数的区别 C和C++中经常会用到指针,和数据项一样,函数也是有地址的,函数的地址是存储其机器语言代码的内存的开始地址。...指针函数和函数指针经常会混淆,一个是返回指针的函数,另一个是指向函数的指针,下面就分别解释指针函数和函数指针的区别。...指向函数的指针 主体是指针 指向的是一个函数的地址 基本声明形式:返回数据类型 + (*函数名) + (变量类型1,…); 注意 * 和函数名要用括号括起来,否则因为运算符的优先级原因就变成指针函数了...)(4,2)); return 0; } 输出结果:8 6 上面的样例中,使用函数指针时使用fun(3,5)和(*fun)(3,5)都可以 函数指针的参数列表要和函数指针指向的函数的参数列表一致...主要记住指针函数是返回指针的函数而函数指针是指向函数的指针 在这个基础上可以有函数指针函数和指针函数指针之类的 指针函数声明的时候 * 和函数名不需要括号括起来 函数指针声明的时候 * 需要和函数名用括号括起来

    79220

    【C语言笔记】指针函数与函数指针?

    前言 函数、指针这两个词结合的顺序不同其意义也不同,即指针函数与函数指针的意义不同。 指针函数 指针函数的本质是一个函数,其返回值是一个指针。...主函数中,把一个数组的首地址与数组长度作为实参传入指针函数pfun里,把指针函数的返回值(即指向数组的指针)赋给整形指针p。最后使用指针p来遍历数组元素并打印输出。...函数指针 函数指针其本质是一个指针变量,该指针变量指向一个函数。C程序在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。...至于为什么func与&func的含义相同,《嵌入式Linux上的C语言编程实践》这本书中有如下解释: 对于函数func来说,函数的名称就是函数代码区的常量,对它取地址(&func)可以得到函数代码区的地址...以上就是关于指针函数与函数指针的简单区分。其中,函数指针广泛应用于嵌入式软件开发中,其常用的两个用途:调用函数和做函数的参数。----

    1.4K30

    详解C语言指针函数、函数指针、函数指针数组「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。 在C语言中,指针是一个很重要但是又很容易弄错的概念,也可以说指针就是C语言的灵魂,所以说学好指针对于完全掌握C语言是一个必须的过程。...而在指针中,指针函数、函数指针、指针函数数组、函数指针数组、指向函数指针数组的指针等等概念看着又绕又头疼。本问总结了一下以上一些概念以及用法,并给出例程深化理解。 1....指针函数 指针函数就是返回指针值的函数,本质是一个函数。所以指针函数等价于“返回值为指针的函数”。...函数指针 函数指针就是一个指向函数的指针。每个函数在编译时,会被分配一个入口地址,一般用函数名来表示,这个地址就是该函数的指针。...C语言函数不可以定义为数组,只能通过函数指针来操作定义函数指针数组。 5.

    1.9K20

    C语言指针(三)函数指针

    函数指针 在我们定义函数的时候,编译器也会在内存空间给函数开辟一个内存,而该内存的首地址就是函数的内存地址,而函数指针就是指向该内存地址的。...3.1 函数 众所周知,C语言是面向过程的语言,或者称函数式编程。 而在C语言中,函数也确实起了很大的作用,在C语言的学习中,你见过最多的可能就是main函数,同时也是你第一个见得函数。...; return 是函数结束的关键字,返回值为0表示程序正确运行,为其他表示有其他异常 切记main函数不要void main(){},这个真的很重要 ❞ 3.2 指向函数的指针 见名知意,这个东西也是一个指针...,只不过他指向的是一个函数,准确来说是函数在内存空间中开辟空间的头地址。...funP = sum; // 将函数sum的地址给funP int ans = funP(1, 2); // 使用指针使用函数 printf("%d", ans

    2K00

    C语言函数传参:指针的指针

    这是道哥的第013篇原创 前言 今天同事问了一个问题:在函数参数中传递指针的指针,很常用的一个场景,重新梳理一下记录于此,以后如果有类似的问题直接发这篇小总结就可以了。...size个字节的空间,然后返回给main函数中的pData指针。...到这里就已经看到程序崩溃的原因了:虽然给指针p赋值了,但是实参pData中的内容一直为空,因此从do_malloc函数返回之后,pData仍然是一个空指针,所以就崩溃了。...在do_malloc函数中,调用系统函数malloc成功之后返回所分配空间的首地址,关键是要把这个首地址送给pData指针,也就是说要让pData指针变量中的值等于这个堆空间的首地址。...执行do_malloc(&pData, 128); 把pData指针的地址作为实参进行传递,因为pData本身就是一个指针,加上取地址符&,就是指针的指针(二级指针),因此do_malloc函数的第一个参数就要定义成

    2.1K20

    基于C语言的函数指针应用-消息命令处理框架

    简述 大家都知道,在C语音中指针的地位很重要,各种指针,功能很强大!但是用不好,指针也比较容易出问题。 这里介绍的是函数指针的一种应用方法,即使用函数指针来实现消息命令的注册与回调处理。...}MsgProcNodeInfoSt; 接下来是一个消息信息结构体的数组定义,也就是关键部分,消息命令的注册表: //消息处理注册表,注册命令字与其对应的处理函数 static MsgProcNodeInfoSt...,用于根据命令字在注册表里查找对应的处理函数,然后回调处理。...这里面有个小技巧,如果命令字与数组索引正好是一致的,那可以直接拿命令字作为数组的下表去索引对应的节点调用其函数指针即可。...-c main.c -o main.o gcc -Wall -I. -c test_msg_proc.c -o test_msg_proc.o gcc ./main.o .

    42520

    【C++】函数指针 ④ ( 函数指针做函数参数 | 使用函数指针间接调用函数 | 函数指针做参数 | 函数指针类型的本质 | 函数指针做参数意义 )

    一、函数指针做函数参数 1、使用函数指针间接调用函数 在上一篇博客 【C++】函数指针 ③ ( 函数指针语法 | 函数名直接调用函数 | 定义函数指针变量 | 使用 typedef 定义函数类型 | 使用..., int); 定义函数 接收 pFun_add 类型的形参作为参数 , 该类型是 函数指针类型 , 也就是 函数接收一个 函数指针类型参数 , 在该函数中调用 函数指针 指向的 函数 ; // 传入函数指针...其它函数中执行 ; 4、函数指针做参数意义 函数指针做参数意义 : 提高程序灵活性 : 通过使用函数指针作函数参数 , 这样可以 在 程序 运行时 动态地 设置 要调用的函数 , 提高了程序的灵活性...; 作为回调函数 : 函数指针 可以作为 回调函数 ; 先将 函数指针变量 作为 实参 传递给 其它函数 , 在 接收函数指针 的函数内部 , 满足某种条件时直接调用该函数指针 指向的 函数 , 这样实现了回调...C 语言 中模拟面向对象用法 ; 可以将特定的 函数指针类型 定义为 结构体 的一部分 , 并使用该 结构体 来传递具有特定行为的对象的地址 ; 该操作有助于更好地组织代码 , 使代码更易于理解和维护

    1.5K50
    领券