const修饰指针

1.const修饰变量

当我们有个变量不想被修改应该如何

#include <stdio.h>
int main()
{
 int m = 0;
 m = 20;//m是可以修改的 
 const int n = 0;
 n = 20;//n是不能被修改的 
 return 0;
}

在上述代码中n本生是不能修改的,其实n本身就是变量,所以就算在代码中修改了,结果就只能报错。

但是,凡事都有例外。当我们破语法规则直接改变n的地址也是可以修改成功的。

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

 

2.const修饰指针变量

对于下面四种修饰有何观点

2.1第一种没有const修饰的

//第一种没有修饰的
void test1()
{
 int n = 10;
 int m = 20;
 int *p = &n;
 *p = 20;//ok?
 p = &m; //ok?
}

请自己尝试一下,是否都可以。

2.2测试const放在*的左边情况 

代码2 - 测试const放在*的左边情况 
void test2()
{
 int n = 10;
 int m = 20;
 const int* p = &n;
 *p = 20;//ok?
 p = &m; //ok?
}

const如果放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。 但是指针变量本⾝的内容可变。

也就是说不可以将20付给n,但是本身可以改变。

2.3 测试const放在*的右边情况 

//代码3 - 测试const放在*的右边情况 
void test3()
{
 int n = 10;
 int m = 20;
 int * const p = &n;
 *p = 20; //ok?
 p = &m; //ok?
}

const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指 向的内容,可以通过指针改变。

2.4 测试*的左右两边都有const 

//代码4 - 测试*的左右两边都有const 
void test4()
{
 int n = 10;
 int m = 20;
 int const * const p = &n;
 *p = 20; //ok?
 p = &m; //ok?
}

当两边都有时,会发生错误,且两个都不行.

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值