温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言中 const int* 和 int* const 的区别是什么

发布时间:2021-08-05 18:18:51 来源:亿速云 阅读:444 作者:Leah 栏目:大数据

本篇文章给大家分享的是有关C语言中 const int* 和 int* const 的区别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

#include <iostream>
using namespace std;

/*	
	学习const 修饰的空间.
	const int a;
	int const a;
	const int*  a;  // 修饰的 a 指向的内存空间 ,
	int* const  a;  // 修饰的是a 变量.
	const int*  const a; // 指针变量和指针指向的内存空间都不可以修改..

	怎么理解这个呢,修饰的是指针, 那么指针和变量的区别是啥呢, 
	说白了都是地址,  保护一个指针是一个什么概念呢,
	如果是保护的值指针变量本身, 那么和int* const 就没有区别了, 
	所以, 再向远处想一点,会不会是保护的是指针指向的变量的值不可以修改呢, 
	回头会发现,  const做了一个 堵路的操作, 
	int* const : 不可以直接操作变量,如修改变量的内容,说白了就是内存中的值.
	const* int : 不可以通过指针间接的操作内存中的内容,

	反推 :  在整个C 语言的系统中,还有那个操作可以直接修改内存中的值.
	const int*  
	


	总结 :
	决定了一什么样的方式去限制修改内存,  const 靠谁近, 就决定了限制方式, 
	const  离 int* 近, 说明这是一个拒绝间接修改内存空间的.
	const  离 变量名近, 说明这是一个拒绝直接修改内存空间的.

*/

void test1()
{
	int a = 10;
	int c = 100;
	const int* b; //  修饰的是未来的空间, 完全可以再起一行进行赋值.
	// 这样的操作修改的是b变量, 并不是 const int* 想要的效果,
	b = &c;
	//*b = 100;  // 这个才是正确的验证方法, 

	int* const d = &a;  // 如果修饰的是变量, 那么在初始化的时候, 就必须给值, 不可以再起一行进行赋值.
	//d = &c;  //  这样的是修饰的是d变量, 如果修改了d变量的值, 程序会提示错误.

	/*
		小结:
		说白了就是保护变量本身的值, 还是保护变量所指空间的值, 
		保护数据的范围不一样,   一个保护当下资源的值, 另外一个更像是保护更远一点资源的值

		怎么用呢, 
		变量的使用位置:
		变量的定义和变量的赋值操作,
		按照上述的描述, 会遇到上述的2种情况. 

		变量在函数实参上的表现
		1 如果函数的参数是 const int* 这样的, 意为这什么呢, 
		  在函数内部是可以修改指针对应变量所在内存空间中的值.

		2 如果函数的参数是 int*  const a,这样的,
		  在函数内部是, 不可以在给a变量进行赋值的, 

		变量在函数返回值上的表象,
		1 如果函数的返回值是  const int*  这样的,可以么, 
		2 如果函数的返回值是  int* const  这样的,可以么.
		做返回值的这个,完全依赖于接受者是一个什么状态, 接受后要咋个处理, 直接修改内存还是间接修改内存.	

	*/
}


/*
	这样修饰的是变量对应指针的空间不可以修改.

*/
void  test1(const int* a)
{
	//*a = 100;  // 表现和正常的赋值没有区别, 是不允许修改的.
	a = (int*)0x01;
	return;
}

void test2(int* const a)
{
	int c = 100;
	//a = &c;   // a变量是不可以修改的,
	return;
}

/*
	const int*  这样的做返回值是没有意义, 接受者必须是一个const int* 类型的 
	函数返回后,如果对的接受者做 *var= ** 的操作, 如同普通的变量赋值的操作, 还是看
	const int* 的约束能力, 

*/
const int* test3()
{
	static int b = 5;
	static int* a =&b;
	return a;
}

/*
	同 test3是一样的,  函数返回后, 接受者的状态表明了一且,
*/
int* const test4()
{
	static int c = 3;
	static int* a =&c;
	return a;
}


int main()
{
	int a = 10;
	test1(&a);

	const int* p = test3();
	//*p = 100;  // 这样是不可以的, 修饰的是未来的空间, 
	cout << *p << endl;

	int* const q = test4();
	//q = &a; 
	cout << *q << endl;

	return 0;
}

以上就是C语言中 const int* 和 int* const 的区别是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI