指针常量和常量指针的区别

1、指针常量——指针类型的常量

在指针常量中,指针自身的值是一个常量,指针变量不允许修改。如同次指针指向一个地址该地址不能被修改,但是该地址里的内容可以被修改定义格式如下:

int *const a=5;
或
int a,b;
int * const p=&a ;p=&b;//操作错误

例: 

#include <iostream>
using namespace std;
int main()
{
    int a = 3;
    int m[2] = { 1, 2 };
    int *const c = &a;//指针常量
    cout << "c的地址:" << c << "c的值:" << *c << endl;
    c[0]=m[0];//改变地址的内容是合法的
    cout << "c的地址:" << c << "c的值:" << *c << endl;
}    

地址没有改变,内容可以改变,输出如下:

2、常量指针——指向“常量”的指针

常量指针本质上是一个指针,常量表示指针指向的内容,说明该指针指向一个“常量”。在常量指针中,指针指向的内容是不可改变的,指针看起来好像指向了一个常量。

int a = 1, b = 2;
const int *p = &a;//等价于int const*p=&a;
p = &b; // 指针可以指向其他地址,地址可以改变,内容不可改变

例:

#include <iostream>
using namespace std;
int main()
{
    int a = 3;
    int m[6] = {0,2,3,6,9,5};
    int const *c = &a;//const int*c = &a;常量指针
    cout << "c的地址:" << c << "   "<<"c的值:" << *c << endl;
    c = &m[3];//可以改变指向地址,不能改变内容(*c=m[3]操作错误)
    cout << "c的地址:" << c << "   " << "c的值:" << *c << endl;
}
    

运行结果如下:

原文地址:https://www.cnblogs.com/hsy1941/p/10506758.html

时间: 2024-08-29 04:39:20

指针常量和常量指针的区别的相关文章

指针常量与常量指针的区别

#include <iostream> #include <stdio.h> #include <string.h> #include <vector> using namespace std; int main() { int a=1,b=2; //--常量指针-- const int *cp = &a; //常量指针,本质是个指针:const修饰的是p1指向的变量,所以指向变量值不可变,指向可以改变 //*p1 = 3; //error,常量指针

【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

[转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * const myPtr = &char_A;//指向常量的常量指针 下面依次对这三种类型进行介绍. 因为*操作符是左操作符,左操作符的优先级是从右到左,对于

指针常量和常量指针

这两个概念经常分不清,今天好好总结一下. 一.指针常量 先说指针常量,是因为它和我们常用的数组有关系. 指针常量的声明 int * const p; 指针声明操作符*在常量限定符const前面,叫做指针常量.忽然发现了一点规律^_^. const限定符修饰的是指针.数组名就是一个指针常量.而数组名和指针有什么区别呢?可以通过引用数组名去修改指向的内存,但是自身不可以被赋值,不可以进行++.–操作. 二.常量指针 常量指针的声明 const int * p1; int const * p2; 常量

指针和引用与及指针常量和常量指针

指针和引用的区别 1.存在空指针,但是不存在空引用. 2.指针可以不初始化,而引用必须初始化,并且,引用的目标一旦确定,后面不能再更改,指针可以更改其指向的目标. 3.指针是一个实体,而引用仅是个别名. 4.引用是类型安全的,而指针不是 (引用比指针多了类型检查. 5.指针和引用的自增(++)运算意义不一样,对引用的操作直接反应到所指向的对象,而不是改变指向:而对指针的操作,会使指针指向下一个对象,而不是改变所指对象的内容. 6.存在指针数组 ,不存在引用数组,不允许使用引用数组,因为引用没有内

常量指针和指向常量的指针

3种与const.指针及指针指向的对象有关的情形: 1.指向常量对象的指针 2.指向某个对象的常量指针 3.指向常量对象的常量指针 在第一种情况中,我们不能修改被指向的对象,但可以使指针指向其他对象: const char* pstring("Some text"); 在第二种情况中,我们不能修改指针中存储的地址,但可以修改指针指向的对象: char* const pstring("Some text"); 在最后一种情况中,指针和被指向的对象都被定义成常量,因此都

指针常量&amp;指向常量的指针

3 4 #include "stdafx.h" 5 6 int main(int argc, char* argv[]) 7 { 8 int a; 9 int b; 10 int* const p1 = &a; //常量指针,指针不可以改,但是指针指向的内容可以改. 11 const int* p2; //指向常量的指针,指针可以改,但是指针指向的内容不可以改. 12 13 const int c = 3; 14 15 a = 1; 16 b = 2; 17 // p1 = &

指针总结以及常量指针与指向常量的指针与指向常量的常指针

/*指针总结: 1:指针未被初始化一个地址或刚删除一个指针都要将其初始化为0,否则的话将会导致该指针失控 2:假如不想改变一个指针,那么将该指针定义为const, 假如不想改变该指针指向的值,将指针指向的值定义为const 假如即不想改变指针又不想改变指针指向的值,那么将指针和指针指向的值都定义为const 在new堆中创建一个对象,然后将内存地址赋给指针,之后我们就可以通过内存地址访问堆中的对象, 假如要删除该对象,我们只需要使用关键字delete,那么就会删除指针指向的对象并释放存储对象的内

c语言常量指针赋值给变量指针导致警告

常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针.指针指向的对象是常量,那么这个对象不能被更改.常量指针的使用要注意,指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改,也就是说常量指针可以被赋值为变量的地址,之所以叫做常量指针,是限制了通过这个指针修改变量的值. 在C/C++中,常量指针是这样声明的: 1)const int *p; 2)int const *p; 例子: int

C指针常量与常量指针

c语言中声明常量的两种方式 const int value int const value 如果要声明常量的指针,即指向常量的指针,则可以参考上面的常量声明修改一下 const int *ptr int const *ptr 把*ptr看成一个整体,那么*ptr中的ptr就是指向常量的指针了.顾名思义,指向常量的指针,那么就不可以通过这个指针去修改这个值了. #include <stdio.h> int main(){ int val = 123; int const *ptr = &