张赐荣——一位视障程序员。
赐荣小站: www.prc.cx

張賜榮

张赐荣的技术博客

博客园 首页 新随笔 联系 订阅 管理
  92 随笔 :: 27 文章 :: 2 评论 :: 77074 阅读

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   张赐荣  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

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

点击右上角即可分享
微信分享提示