栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

理解C指针(常量指针,指针常量)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

理解C指针(常量指针,指针常量)

⒈指针

指针就是地址,地址就是内存编号,指针变量就是存放这种编号的变量

①上代码

#include
int main()
{
	int m=5,*p,**q,***r;//定义指针变量时 * 为类型说明符 
	p=&m; //p指针就是 变量m  的地址,   &为取地址符 
	q=&p;  //q指针 就是 变量p 的地址 
	r=&q;  //r指针 就是 变量 q 的地址 
	printf("%dn",p);
	printf("%dn",*p); //非定义语句中 * 为指向运算,指向该内存里面的数据
	printf("%dn",q); 
	printf("%dn",*q);
	printf("%dn",**q);  
	printf("%dn",r);
	printf("%dn",*r);
	printf("%dn",**r);
	printf("%dn",***r);   
	  
}

②输出结果

③形象理解

⒉指针常量&常量指针

示例

#include
int main()
{
	int a=1,b=2,*p;  
	p=&a;
	printf("内存编号第一次为:%dn",p);   //内存编号第一次为:6487572
	p=&b;
	printf("内存编号第二次为:%dn",p);   //内存编号第二次为:6487568
	printf("*p=%dn",*p); //*p=2
	*p=5;  //间接引用指针常量可以修改内存中的数据  
	printf("b=%d,*p=%dn",b,*p); //b=5,*p=5
 } 

示例说明指针即内存编号是会变的,且内容也会变

指针常量
int * const p = &a;//声明时必须初始化

①上代码

#include
int main()
{
	int a=1,b=2;
	int * const p=&a;
	printf("*p=%dn",*p);   //*p=1
	*p=10;  //间接引用指针常量可以修改内存中的数据  
	printf("a=%d,*p=%dn",a,*p);  //a=10,*p=10  
	//若添加
	p=&b;  则是错误的写法,指针常量不可以指向其他变量,编号不能变了 
}

②通俗点理解

int * const p=&a;  声明的同时初始化,第一次去宾馆确定房间号
*p=10;  间接引用指针常量可以修改内存中的数据  每次去房间里的人不一样
p=&b;  错误-->坚决不换房间

总结:流水的女朋友,铁打的房间号

常量指针
const int * p;
int const * p; //两种声明方法,不必初始化

①上代码

	#include
int main()
{
	int a=1,b=2;
	int const *p;
	p=&a;
	printf("*p=%dn",*p);//*p=1
	p=&b;
	printf("*p=%dn",*p);  //*p2
	*p=5;  //非法,间接引用指针常量不可以修改内存中的数据  
	
}
	

②通俗理解

p=&a;
p=&b;   想去哪一个房间都可以
*p=5;  房间里面的人不能换

总结:皇帝翻牌,去哪无所谓,牌子上的人不会变

结语: 指针常量 -> 指针为常量,不可改变指向,但可修改指向的值。 常量指针 -> 常量的指针,可改变指向,不可修改指向的值。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/317006.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号