📜  常量指针,指向常量的指针和指向常量的常量指针之间的区别

📅  最后修改于: 2021-05-31 18:40:11             🧑  作者: Mango

在本文中,我们将讨论常量指针,指向常量的指针和指向常量的常量指针之间的区别。指针是保存一些其他变量,常量或函数的地址的变量。有几种使用const限定指针的方法。

  • 指向常量的指针。
  • 常量指针。
  • 指向常量的常量指针。

指向常量的指针

在指向常量的指针中,指针所指向的数据是常量,无法更改。虽然,指针本身可以更改并指向其他地方(因为指针本身是变量)。

下面是说明相同内容的程序:

C++
// C++ program to illustrate concept
// of the pointers to constant
#include 
using namespace std;
  
// Driver Code
int main()
{
  
    int high{ 100 };
    int low{ 66 };
    const int* score{ &high };
  
    // Pointer variable are read from
    // the right to left
    cout << *score << "\n";
  
    // Score is a pointer to integer
    // which is constant *score = 78
  
    // It will give you an Error:
    // assignment of read-only location
    // ‘* score’ because value stored in
    // constant cannot be changed
    score = &low;
  
    // This can be done here as we are
    // changing the location where the
    // score points now it points to low
    cout << *score << "\n";
  
    return 0;
}


C++
// C++ program to illustrate concept
// of the constant pointers
#include 
using namespace std;
  
// Driver Code
int main()
{
  
    int a{ 90 };
    int b{ 50 };
  
    int* const ptr{ &a };
    cout << *ptr << "\n";
    cout << ptr << "\n";
  
    // Address what it points to
  
    *ptr = 56;
  
    // Acceptable to change the
    // value of a
  
    // Error: assignment of read-only
    // variable ‘ptr’
    // ptr = &b;
  
    cout << *ptr << "\n";
    cout << ptr << "\n";
  
    return 0;
}


C++
// C++ program to illustrate concept of
// the constant pointers to pointers
#include 
using namespace std;
  
// Driver Code
int main()
{
  
    const int a{ 50 };
    const int b{ 90 };
  
    // ptr points to a
    const int* const ptr{ &a };
  
    // *ptr = 90;
    // Error: assignment of read-only
    // location ‘*(const int*)ptr’
  
    // ptr = &b;
    // Error: assignment of read-only
    // variable ‘ptr’
  
    // Address of a
    cout << ptr << "\n";
  
    // Value of a
    cout << *ptr << "\n";
  
    return 0;
}


输出:
100
66

常量指针

在常量指针中,指针指向固定的内存位置,并且可以更改该位置的值,因为它是变量,但是由于此处将其设为常量,因此指针将始终指向同一位置。

下面是一个示例,用于了解有关引用的常量指针。可以假定引用是自动取消引用的常量指针。可以更改传递给实际参数的值,但参考值指向相同的变量。

下面是说明相同内容的程序:

C++

// C++ program to illustrate concept
// of the constant pointers
#include 
using namespace std;
  
// Driver Code
int main()
{
  
    int a{ 90 };
    int b{ 50 };
  
    int* const ptr{ &a };
    cout << *ptr << "\n";
    cout << ptr << "\n";
  
    // Address what it points to
  
    *ptr = 56;
  
    // Acceptable to change the
    // value of a
  
    // Error: assignment of read-only
    // variable ‘ptr’
    // ptr = &b;
  
    cout << *ptr << "\n";
    cout << ptr << "\n";
  
    return 0;
}
输出:
90
0x7ffc641845a8
56
0x7ffc641845a8

指向常量的常量指针

在指向常量的常量指针中,指针所指向的数据是常量,无法更改。指针本身是常量,不能更改并指向其他地方。下图说明了这一点:

下面是说明相同内容的程序:

C++

// C++ program to illustrate concept of
// the constant pointers to pointers
#include 
using namespace std;
  
// Driver Code
int main()
{
  
    const int a{ 50 };
    const int b{ 90 };
  
    // ptr points to a
    const int* const ptr{ &a };
  
    // *ptr = 90;
    // Error: assignment of read-only
    // location ‘*(const int*)ptr’
  
    // ptr = &b;
    // Error: assignment of read-only
    // variable ‘ptr’
  
    // Address of a
    cout << ptr << "\n";
  
    // Value of a
    cout << *ptr << "\n";
  
    return 0;
}
输出:
0x7ffea7e22d68
50
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”