指针常量、常量指针、指向常量的指针常量

简介: 指针常量、常量指针、指向常量的指针常量,这三个概念让很多人感到拗口,不好记住。但是只要你仔细研究,其实也就这么回事。一. 指针常量1. 所谓的指针常量指的是指针是一个常量,也就是常指针,和我们平时说的常量一样,指针指向的内存空间的地址是无法改变的2. 声明一个指针常量 int* const p = &a,定义一个指针p并且该指针是常量只能指向变量a。


指针常量、常量指针、指向常量的指针常量,这三个概念让很多人感到拗口,不好记住。但是只要你仔细研究,其实也就这么回事。


一. 指针常量

1. 所谓的指针常量指的是指针是一个常量,也就是常指针,和我们平时说的常量一样,指针指向的内存空间的地址是无法改变的

2. 声明一个指针常量 int* const p = &a,定义一个指针p并且该指针是常量只能指向变量a。记住指针常量只能在定义的时候初始化一次,其它地方不能再对它赋值,例如 p = &b就是错误的写法

3. 看下面的例子

int main(){
	char str1[] = "hello";
	char str2[] = "world";
	char* const p1 = str1;
	char* const p2 = str2;
	//test
	cout<<p1<<endl; //输出"hello" 
	cout<<p2<<endl; //输出"world"
	*p1 = 'H';
	*p2 = 'W';
	cout<<p1<<endl; //输出"Hello",说明指针指向的内存空间可修改
	cout<<p2<<endl; //输出"World",说明指针指向的内存空间可修改
	//会报错
	//p1 = p2; //报错,不允许把p1指向其它地址空间
	//p2 = p1; //报错,不允许把p2指向其它地址空间
	return 0;
}

二. 常量指针

1. 常量指针指的是指向常量的指针,指针指向的内存空间可以改变,但是指针指向的内存空间的值不允许改变(也就是不允许通过指针来修改内存空间的内容)

2. 声明一个常量指针 const char *p;p = &str;定义了一个指针变量p,p指向的str的内存空间并且不允许通过p去修改str的内容

3. 指针可以指向不同的地址空间 

4. 看下面的例子

int main(){
	char str1[] = "hello";
	char str2[] = "world";
	const char *p1 = str1;
	const char *p2 = str2;
	//test
	cout<<p1<<endl; //输出"hello"
	cout<<p2<<endl; //输出"world"
	//报错语句
	//*p1 = 'H';  //报错,说明不允许通过指针p1修改str1的内容
	//*p2 = 'W';  //报错,说明不允许通过指针p2修改str2的内容
	p1 = p2;
	cout<<p1<<endl; //输出"world",说明指针p1可以指向其它地址空间
	return 0;
}


三. 指向常量的指针常量

1. 指向常量的指针常量,表示指针是一个常指针,并且指针指向的内容不允许修改。说明指针指向的内存地址不能改变,并且也不能通过指针修改变量的值

2. 声明一个指向常量的指针变量 const char* const p = &str; 定义指针p是常指针,并且变量str的内容不能通过指针p修改

3. 看下面例子

int main(){
	char str1[] = "hello";
	char str2[] = "world";
	const char* const p1 = str1;
	const char* const p2 = str2;
	//test
	cout<<p1<<endl; //输出"hello"
	cout<<p2<<endl; //输出"world"
	//报错
	//*p1 = 'H'; //说明不允许通过指针p1修改str1的内容
	//*p2 = 'W'; //说明不允许通过指针p2修改str2的内容
	//报错
	//p1 = p2; //说明指针p1不允许指向别的地址空间
	//p2 = p1; //说明指针p2不允许指向别的地址空间
	return 0;
}

记忆法:const在谁前面谁就是常量。

              char* const p = &str; const在p前面说明指针p是常量,即指针常量

              const char *p = &str; const在char前面说明变量是常量,即常量指针

              const char* const p = &str;const既在char前面又在p前面说明是指向常量的指针常量



目录
相关文章
|
8月前
引用的本质:指针常量
引用的本质:指针常量
36 0
|
6天前
|
编译器 C++
C/C++杂谈——指针常量、常量指针
C/C++杂谈——指针常量、常量指针
11 0
|
6天前
|
人工智能 C++
【重学C++】【指针】轻松理解常量指针和指针常量
【重学C++】【指针】轻松理解常量指针和指针常量
21 0
|
6天前
|
编译器 C语言 C++
深入探究C语言中的常量指针与野指针概念及其应用
深入探究C语言中的常量指针与野指针概念及其应用
21 1
|
6天前
|
C++
面试题:常量指针和指针常量?
面试题:常量指针和指针常量?
22 0
|
6天前
|
编译器 C++
C++ 中 const 和 constexpr 关键字解析:常量、函数和指针
很多 C++ 的初学者看到 const 这个关键字的第一反应都是一头雾水,主要是因为 const可 以出现在很多的位置,以及后面加入的 constexpr 更是常常感到困惑,今天就为大家一一解释出现它们的含义和以及作用
109 0
|
安全 Java 编译器
C生万物 | 常量指针和指针常量的感性理解
常量指针是指针吗❓指针常量是常量吗❓它们有何区别,本文告诉你👈
75 0
C生万物 | 常量指针和指针常量的感性理解
|
编译器 C语言
指针详细概念知识点及运用,指针与常量,指针的运算,scanf()中的&有什么用?你想知道的,都在这儿~ 1.1.4
f函数里的*p保存了i的地址,在这个函数指向i,此时对*p赋值,也就相当于对i值进行了改变,实现了对外链接,i的值变为了26,就是芥末神奇。此时以*q = 26为例,是可以做的,因为i不是const,i可以赋初值,使 i=26,但因为q是const,所以q++的做法是错误的。表示不能通过p这个指针去修改i这个变量,即*p=26是错误的,不能让 i=26,此时的*p是const。无论指向什么类型,所有指针的大小都是一样的,因为都是地址,但指向不同类型的指针是不能直接相互赋值的。......
指针详细概念知识点及运用,指针与常量,指针的运算,scanf()中的&有什么用?你想知道的,都在这儿~ 1.1.4
|
存储 安全 编译器
c++nullptr(空指针常量)、constexpr(常量表达式)
c++nullptr(空指针常量)、constexpr(常量表达式)
123 0

热门文章

最新文章