C/C++基础面试-Const的全面理解(C部分)

Const的全面理解(C部分)

 

下面我们来看一些简单的代码:

const int a1=1;
int const a2=1;

int *p=0x1;
const int* a1;
int* const a2;
int const* const a3;

Const 是C中类似的修饰符。常见的数据类型修饰符有

Short long unsigned static auto extern register.

 

 

定义一个变量

类型描述符 变量名;

类型描述符=类型的修饰符+数据类型(int,char,float)

const int a1=1;
int const a2=1;

表示的就是一个意思(指const int和int const是一个意思)

另外:

Static int short i;
Int static short i;

也都是表示一个意思(指static、int、short)

 

对指针变量类型的理解

[],(),*有优先级,有以下理解

int *a1[10]; //[]高于*,所以是一个数组,每一个成员都是指针

int (*a2)[10]; //()高于[],是一个指针,指向的类型为一个数组


此处可见!

 

对指针变量的类型理解(建议从左向右)

int p = 0x1;
const int* a1=&p;	//变量a1,int*,const,表名指向的数据不可改
int const *a2 = &p;	//同a1
int* const a3=&p;	//a3指向的地址不能修改
int const* const a4=&p;	//什么都不能修改

最后!

typedef void* VP;

1.const void* ptr1 

2.const VP ptr2

我们用如下代码来测试

#include <stdio.h>
void main()
{

	typedef void* VP;
	const void* ptr1=NULL;
	const VP ptr2=(VP)ptr1;
	VP const ptr3=(VP)ptr1;
	getchar();
}

可见当用typedef定义时都为常指针

 

Const的作用

1.向其他程序员传递这个是不能修改的。

2.有可能让编译器产生更加紧凑的代码,避免不必要的错误。

3.合理包含我们只读的数据,避免不必要的错误

使用的位置

1.定义常量。防止被修改

2.函数参数中,加以限制

如strcpy和strncpy等等等



  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/object.hpp:664:34: error: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘struct msgpack::v2::object’ from an array of ‘const msgpack_object’ {aka ‘const struct msgpack_object’} [-Werror=class-memaccess] std::memcpy(&o, &v, sizeof(v)); ^ In file included from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object_fwd.hpp:17, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/adaptor/adaptor_base_decl.hpp:14, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/adaptor/adaptor_base_decl.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/adaptor/adaptor_base.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v1/object_decl.hpp:16, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object_decl.hpp:14, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/object.hpp:13, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack.hpp:10, from /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/example/cpp03/stream.cpp:10: /home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master/include/msgpack/v2/object_fwd.hpp:23:8: note: ‘struct msgpack::v2::object’ declared here struct object : v1::object { ^~~~~~ cc1plus: all warnings being treated as errors make[2]: *** [example/cpp03/CMakeFiles/stream.dir/build.make:63:example/cpp03/CMakeFiles/stream.dir/stream.cpp.o] 错误 1 make[2]: 离开目录“/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master” make[1]: *** [CMakeFiles/Makefile2:415:example/cpp03/CMakeFiles/stream.dir/all] 错误 2 make[1]: 离开目录“/home/AQTJClient/AQTJAuditClient/depends/msgpack-c-master”
07-20

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值