在本文中,我们将讨论常量指针,指向常量的指针和指向常量的常量指针之间的区别。指针是保存一些其他变量,常量或函数的地址的变量。有几种使用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等的更多准备工作,请参阅“完整面试准备课程” 。