0
点赞
收藏
分享

微信扫一扫

极智Coding | 讲一讲常量指针与指针常量


  ​​欢迎关注我的公众号 [极智视界],获取我的更多笔记分享​

  大家好,我是极智视界,本文讲解一下 常量指针与指针常量的用法。

  常量指针不能用于改变它指向的值,指针常量在初始化后就不能改变。

文章目录

  • ​​1 常量指针​​
  • ​​2 指针常量​​
  • ​​3 指向常量的常指针​​
  • ​​4 示例​​
  • ​​4.1 示例一​​
  • ​​4.2 示例二​​
  • ​​4.3 示例三​​

1 常量指针

  如果作为形参传入到函数中,其在函数内部是不能被修改的。

  常量指针定义:又叫常指针(常量的指针),即这是个指向常量的指针,这个常量是指针的值(地址),而不是地址指向的值。

  关键点:

  • 常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;
  • 常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;
  • 指针还可以指向别处,因为指针本身只是个变量,可以指向任意地址。

  代码形式:

数据类型 const 指针变量;
const 数据类型 指针变量;



2 指针常量

  指针常量定义:本质是一个常量,而用指针修饰它。指针常量的值是指针,这个值因为是常量,所以不能被赋值。

  关键点:

  • 它是个常量;
  • 指针所保存的地址可以改变,然而指针所指向的值却不可以改变;
  • 指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化。
  • 使用前要初始化

  代码形式:

数据类型* const 指针变量;



3 指向常量的常指针

  指向常量的常指针定义:指向常量的指针常量就是一个常量,且它指向的对象也是一个常量。

  关键点:

  • 一个指针常量,指向的是一个指针对象;
  • 它指向的指针对象且是一个常量,即它指向的对象不能变化。

  代码形式:

const 数据类型* const 指针变量;
数据类型 const * const 指针变量;



4 示例

4.1 示例一

#include <iostream>

using namespace std;

int main()
{
/// 常量指针
int a;
const int *p1 = &a;
a = 300;
//*p1 = 56; // 错误,*p1是const int的,不可修改,即常量指针不可修改其指向的内容
int b = 200;
p1 = &b; // 指针可以修改

/// 指针常量
int* const p2 = &a;
a = 500; // 可以通过原来的声明修改值
*p2 = 400; // 指针是常量,指向的地址不可以变化,但是指向的地址所对应的内容是可以变化的
//p2 = &b; // 错误,因为p2是const指针,因此不能改变p2指向的地址

/// 指向常量的常量指针
const int* const p3 = &a;
//*p3=1; // 错误
//p3=&b; // 错误
a = 600; // 可以通过原来的声明修改值
}

4.2 示例二

#include <iostream>

using namespace std;

int main()
{
int a = 3;
int b = 1;
int c = 2;
int const *p1 = &b;
int *const p2 = &c;
cout << "old vars and pointer's address: " << endl;
cout << "&a = " << &a << "a = " << a << endl;
cout << "&b = " << &b << "&c = " << &c << "b = " << b << "c = " << c << endl;
cout << "p1 = " << p1 << "p2 = " << p2 << "*p1 = " << *p1 << "*p2 = " << endl << endl;

p1 = &a;
b = 11;
cout <<"the address and values of const pointer: " << endl;
cout << "p1 = " << p1 << "*p1 = " << *p1 << endl << endl;

c = 22;
*p2 = c;
cout << "the address and values of const pointer: " << endl;
cout << "p2 = " << p2 <<"*p2 = " << *p2 << endl << endl;

return 0;
}

极智Coding | 讲一讲常量指针与指针常量_c语言

  从输出结果可以看出,对于常量指针 p1,改变其地址指向,内容也随着地址的改变而变化了;对于指针常量 p2,初始化后地址就固定了,内容可以随时重新赋值。

  对于常量指针 p1,可以改变它指向的地址,但不能改变指向的内容;对于对于指针常量 p2,可以改变它指向地址的内容,却不能改变它指向的地址。

4.3 示例三

#include <iostream>
#include <iomanip>

using namespace std;

const int SIZE = 6;
const double payRates[SIZE] = {18.55, 17.45, 12.85, 14.97, 10.35, 18.89};
const double PAY[SIZE] = {17.2, 11.4, 14.56, 39.12, 28.45, 55.77};

void displayPayRates(const double *rates, int size)
{
cout << *rates << endl;
rates = PAY;
cout << *rates << endl;
cout << setprecision(2) << fixed << showpoint;

for(int count = 0; count < size; count++)
{
cout << rates + count << endl;
cout << "Pay rate for employee " << (count + 1) << " is $ " << *(rates + count) << endl; endl;
}
}

int main()
{
cout <<"this is payRates's address " << &payRates << endl;
cout << "this is PAY's addtess " << &PAY << endl;
displayPayRates(payRates, SIZE);
}

极智Coding | 讲一讲常量指针与指针常量_c++_02

  以上 要注意三点:

  • 作为固定形参的输入 const double *rates,其在 displayPayRates 函数内部不能被重新赋值,即不能出现类似于 rates[0] = 12.56 等这样的代码,但可以出现 rates = &PAY[SIZE] 和 rates = PAY 的代码;
  • rates 最初表示 payRates 常量首地址,其每加 1 则地址向后移动 8 个字节,因为 double 类型占 8 个字节
  • displayPayRates 函数的形参中一定要包含 const 关键字,否则会产生编译器报错。


  好了,以上分享了 常量指针与指针常量的用法。希望我的分享能对你的学习有一点帮助。




极智Coding | 讲一讲常量指针与指针常量_开发语言_03

微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

极智Coding | 讲一讲常量指针与指针常量_算法_04


举报

相关推荐

0 条评论