sizeof与const关键字

 

C++中sizeof与const关键字会经常出错。

一、sizeof

在32位系统中下面各个sizeof的值是多少?

	int *p = NULL;
	sizeof(p)//值为4, 因为32位系统中的指针占4字节
	sizeof(*p)//4, 因为此指针指向的是int类型

	int a[100];
	sizeof(a)//400, 数组大小
	sizeof(a[100])//4, 访问元素, 相当于指针
	sizeof(&a)//400, 数组别名
	sizeof(&a[0])//4, 访问元素

	int b[100];
	void fun(int b[100])
	{
		sizeof(b);//4, 这里不再是整个数组的大小,b蜕变成一个指针
	}


 

二、const

const修饰的值是常量,确切的说应该是只读的变量。其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。

当const修饰指针的时候,要注意一些情况,例如下面的情况:

	const int *p;//p可变, p指向的对象不可变
	
	int const *p;//p可变, p指向的对象不可变

	int * const p;//p不可变, p指向的对象可变

	const int *const p;//指针p和p所指向的对象都不可变


int  const * p 和int * const  p是一致的,所以只要看const右边的是什么就可以判断了

int const * p 中const右边是*p 所以p是一个指针常量

int* const  p 中const右边是p,所以这个变量是常量,这个变量是指针,所以这个也是指针常量

const int* p 中const右边是int,所以这个整型是常量,所以说这个*p的值不能改变;

 

对于上面的东西很难记住,可以先忽略类型名,看const离哪一个近,离谁近就修饰谁

const int *p;         //const修饰 *p, 所以p指向的对象不可变

int const *p;         //const修饰 *p, 所以p指向的对象不可变

int * const p;        //const修饰p, p不可变, p指向的对象可变

constint *const p;         //前一个const修饰*p, 后一个修饰p, 所以p和*p都不可变


另外,const也可以修饰函数的参数。当不希望这个参数值在函数体内被意外改变时使用。例如:

void Fun(const int i)

这就告诉了编译器,在函数体中,i 不能被改变。

 

const还可以修饰函数的返回值,则返回值不能被修改,例如:

const int Fun(void)


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值