张赐荣,视障者,信息无障碍专家
深耕Web/PC/移动端可访问性研究与实践工作多年,对跨平台无障碍解决方案拥有深刻的独特理论和丰富的实战经验。
精通视障用户软件交互设计,致力于用专业的能力改善、提升产品可及性体验。

張賜榮

张赐荣的技术博客

博客园 首页 新随笔 联系 订阅 管理

test1.c

//error

#include <stdio.h>
int main(void)
{
int i = 5;
const int *p = &i;
printf("%d\n",*p);
*p = 10;
printf("%d\n",*p);
return 0;
}

test2.c

//error

#include <stdio.h>
int main(void)
{
	int i = 5,j = 10;
int* const p = &i;
	printf("%d\n",*p);
p = &j;
printf("%d\n",*p);
return 0;
}

test3.c

// correct

#include <stdio.h>
int main(void)
{
	const int i = 5;
	int *p = &i;
*p = 10;
	printf("%d\n",*p);
	return 0;
}

说明

当const在左边时,及表示const修饰了指针变量指向的那块内存,当const在右边时,则表示const修饰了指针变量。
用const修饰的指针变量被称为指针常量,及表示该指针变量只能付一次值。
test2中的指针变量p指向了变量i,后又试图指向j,所以这是错误的。
用const修饰指针变量指向的内存,则该指针变量被称为常量指针,及表示该指针变量没有对它指向的内存进行改写的权利,但该指针变量仍可以改变自身的指向,无论该变量指向哪一块内存,都无法对他指向的内存进行改写。
在test1中,指针变量p的定义声明了该变量指向的内存是const,p指向了i,p无法对i进行改写,但由于i本身的定义中没有用const修饰,所以i可以自身改写自身的值,如果i改写了自身的值,则p读入的及是i改写后的值。
如果一个指针变量指向了一块本身是const的内存,则该内存自身无法修改自身的值,但通过指针变量就可以修改它的值,在test3中 证明了这点。

posted on 2022-03-21 16:17  张赐荣  阅读(66)  评论(0)    收藏  举报

感谢您访问张赐荣的技术分享博客!
博客地址:https://cnblogs.com/netlog/
知乎主页:https://www.zhihu.com/people/tzujung-chang
个人网站:https://prc.cx/