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

1、C++基础(const和指针)

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

1、C++基础(const和指针)

C++基础
  • const 和指针
    • 1、const 在C和C++中的区别
    • 2、const和指针的关系
    • 3、常变量与指针
    • 4、同类型指针的赋值兼容规程
    • 5、练习

const 和指针 1、const 在C和C++中的区别
  • C中以变量为主
int main()
{
	const int n = 10;//C中以变量为主
	int ar[n] = {1,2};//error
	int *p = (int*) &n;
	*p = 100;
	printf("%n = %d *p = %d n",n,*p);
	return 0;
}
  • C++中以常量为主
int main()
{
	const int n = 10;//C中以变量为主
	int ar[n] = {1,2,3,4};//ok
	int *p = (int*) &n;
	*p = 100;
	cout<<"n  "<<"*p ="<<*p< 
2、const和指针的关系 
int main()
{
int a = 10, b = 10;
int *p1 = &a; // 普通指针
const int *p2 = &a; // 指向为常性(解引用为常性)
int const *p2 = &a;
int * const p3 = &a; // 指针变量自身为常性
const int * const p4 = &a; // 指向(解引用)和指针变量自身都为常性
}
3、常变量与指针
int main()
{
	const int a = 10;
	int *p1 = &a;//error,因为通过*p1 可以改变a 的值
	const int *p2 = &a;//ok,*p2改变指向,但不可以通过解引用改变a的值
	int *const p3 = &a;//error;const 修饰p3,通过*p3可以改变a的值,但不可以改变指向的地址
	const int *const *p4 = &a;//ok,即不可以改变指向,也不可以通过解引用改变值
	int *p5 = (int*) &a;//ok,a此时是常量10,无法通过*p 指向常量地址,因此强转,但不安全
	return 0;
}
	
4、同类型指针的赋值兼容规程
int main()
{
	int a = 10,b = 20;
	int *p = &a;
	int *s1 = p;//ok,用s1指p的地址,
	const int *s2 = p;//ok,*s2改变指向,但不可以通过解引用改变p的值
	int *const s3 = p;//ok, 通过*s3可以改变p的值,但不可以改变指向的地址
	const int *const s4 = p;//ok
	return 0;
}
5、练习
int main()
{
	 int a = 10;
	 int b = 20;
	 const int *p = &a;
	 int *s1 = p;//error
	 const int *s2 = p;//ok
	 int *const s3 = p;//error
	 const int8 const s4 = p;//ok
}

p 可以指向任何地址,但是不可以通过 *p 改变 a 的值,s1、 s3可以改变 a 的值,不可以通过 s2 、s4改变a 的值。

int main()
{
	 int a = 10;
	 int b = 20;
	 int const *p = &a;
	 int *s1 = p;//ok
	 const int *s2 = p;//ok
	 int *const s3 = p;//ok
	 const int8 const s4 = p;//ok
}

对于指针p,它只能指向a的地址,可以改变 a 的值,对于s1,s2,s3,s4他们可以去指向a的地址,也可以去指向a的地址,但是不管它们指向谁的地址,都不能改变p的指向,所以能力没有被扩展,因此都正确

总结:能力强的指针赋值给能力收缩的指针

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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