1)指向常量的指针变量

导读:
  指针本身的内容可改变,但不会通过该指针改变所指向的内容。例如:
  const int MAX=3;
  const int * iPointer = &MAX;
  iPointer = new int;
  是合法的。
  *iPointer=2;//非法
  *iPointer += 3;//非法,它不可以改变指针所指向的内容。
  应该明确,指向常量的指针是可以指向变量的。下列语句成立:
  int k=5;
  const int * iPointer = &k;
   2)指向变量的指针常量 (类似引用)
  指针本身不会在运行时改变,但是指向内容可以改变。例如:
  int size = 5;
  int * const iConstPointer = &size;
  //指针常量必须在定义的时候初始化确定它的指(内容)
  iConstPointer = new int;//非法
  (* iConstPointer)++;//合法
   3) 指向常量的指针常量
  不仅是指针本身不能修改,它所指向的内容也不能通过它改变。
  const in MAX = 30;
  const int * const ip = &MAX;
   4) 常量引用
  常量指针和常量引用仅保证被指向和引用的值不会直接和间接地通过这个指针或引用而修改,但并不是保证这个值本身不会改变。例如:
  int k = 8;
  const int &m = k;
  k+=7;//合法 k本身(没有通过m)改变,当然再访问m得到的值也变成15。
   总结:
  const int * ip; //常量指针
  *ip不可修改,ip可以修改
  int * const ip = “abcd”;//指针常量
  *ip可以修改,ip不可修改,定义是需初始化
  const int * const ip = “abcd”;//常量指针常量
  *ip不可修改,ip不可修改,定义是需初始化

本文转自
http://dev.youkuaiyun.com/author/AaronChung/ca7274d963be4de89331cb3e498910e3.html
<think>好的,我需要回答用户关于C++中常量指针是否可以指向常量变量的问题。首先,我需要回顾一下用户提供的引用内容,确保理解各个术语的定义。 根据引用[2],常量指针的定义是“int *const p”,即指针本身是常量,不可修改指向的地址,但可以通过指针修改所指向的值。而指向常量指针是“const int *p”,指针可以修改指向的地址,但不能通过指针修改值。用户的问题是关于常量指针指针常量指向常量变量是否允许。 引用[3]提到,常量指针可以指向变量常量,但无法通过指针修改值。例如,const int *const p1=&a;,这里a是变量,但p1不能修改a的值。而引用[4]说明常量指针指向的地址是常量,但指针本身是变量?这里可能需要再仔细确认。 可能混淆点在于“常量指针”和“指针常量”的中文翻译。根据引用[1]和[2],常量指针应该是指指针本身是常量,即int *const p,必须初始化,之后不能改变指向的地址。而指向常量指针是const int *p,可以指向常量或非常量,但不能通过指针修改值。 用户的问题:常量指针是否可以指向常量变量。这里的“常量指针”指的是指针本身是常量(int *const p),还是指向常量指针(const int *p)?根据引用[2],如果是常量指针(int *const p),它可以指向常量变量,并且可以通过指针修改该变量的值,但指针指向不能改变。例如: int a = 5; int *const p = &a; // 正确,常量指针指向常量变量 *p = 10; // 允许,修改a的值 而如果是指向常量指针(const int *p),它也可以指向常量变量,但不能通过指针修改变量的值: const int *p = &a; // 允许,指向常量变量 *p = 10; // 错误,不能通过p修改a的值 用户的问题中的“常量指针”可能指的是指针本身是常量,即int *const类型。根据引用[3]中的例子,即使是指向常量的常指针(const int *const p),也可以指向常量变量,只是不能通过指针修改值,也不能改变指向。 所以总结: 1. 常量指针(int *const p)可以指向常量变量,允许通过指针修改变量值,但指针指向不可变。 2. 指向常量指针(const int *p)也可以指向常量变量,但不能通过指针修改其值。 3. 指向常量常量指针(const int *const p)同样可以指向常量变量,但既不能修改指向,也不能通过指针修改值。 需要根据用户的问题具体回答,用户问的是“常量指针是否可以指向常量变量”,这里的常量指针应理解为指针本身是常量的情况。根据引用[2]和[3],允许这样做,并且可以通过指针修改值,只要指针本身指向的地址不变。例如: int a = 7; int *const p = &a; // 允许 *p = 8; // 允许,修改a的值 p = &b; // 错误,不能改变指向 因此,答案应该是允许的,但需要注意指针本身不可变,但可以修改指向变量值。</think>在C++中,**常量指针指针常量)可以指向常量变量**,且这种操作是合法的。以下分三点详细说明: --- ### 1. 常量指针的定义与特性 **常量指针**的声明格式为`int *const p`,其核心特性为: - **指针指向不可变**(必须初始化且不能修改指向的地址) - **可以通过指针修改指向变量的值**(若变量本身不是常量) 例如: ```cpp int a = 5; int *const p = &a; // ✅ 正确:常量指针指向常量变量 *p = 10; // ✅ 正确:通过指针修改a的值(a变为10) // p = &b; // ❌ 错误:不能改变指针指向 ``` --- ### 2. 常量指针指向常量指针的区别 - **指向常量指针(const int *p)** 允许指向常量变量,但**不能通过指针修改变量的值**: ```cpp int a = 5; const int *p = &a; // ✅ 正确:指向常量变量 // *p = 10; // ❌ 错误:不能通过p修改a的值 ``` - **常量指针(int *const p)** 可以指向常量变量,**允许通过指针修改变量的值**(前提是变量本身不是常量)。 --- ### 3. 综合示例与验证 ```cpp int main() { int x = 7; int *const p1 = &x; // ✅ 常量指针指向常量变量 *p1 = 8; // ✅ 修改x的值(x变为8) const int y = 9; const int *const p2 = &y; // ✅ 指向常量常量指针 // *p2 = 10; // ❌ 错误:不能通过p2修改y的值 } ``` --- ### 总结 - **允许**常量指针(`int *const`)指向常量变量,且**可以修改该变量的值**。 - 若指针是**指向常量常量指针(`const int *const`)**,则既不能修改指向,也不能通过指针修改变量的值[^3][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值