码迷,mamicode.com
首页 > 其他好文 > 详细

const 关键字

时间:2018-07-06 01:26:51      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:efi   strong   str   div   std   验证   src   bsp   .com   

今天回家路上,在一篇博客中发现了这么一个问题:

请解释下面的声明代表的含义。

const int a;
int const a;
const int *a;
int * const a;
int const * a const;

 

然后后面有解释如下:

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

 

我只知道const意味着不可修改, 但是让我说出这4种的区别, 的确有点蒙圈, 因此编码验证。

 1 #include<stdio.h>
 2 
 3 void main(void)
 4 
 5 {
 6 
 7        #define Q1
 8 
 9        #ifdef Q1
10 
11        /*
12 
13         * 问题1:
14 
15         *  const int a;
16 
17         * int const a;
18 
19         * const int *a;
20 
21         * int * const a;
22 
23         * int const * a const;
24 
25         * 上面的声明都是什么意思?
26 
27         */
28 
29         
30 
31         const int a;
32 
33         int const a1;
34 
35         const int *a2;
36 
37         int * const a3;
38 
39         int const * a4 const;
40 
41         #if 0
42 
43         a = 5;
44 
45         a1 = 5;
46 
47         a2 = NULL;
48 
49         a2 = malloc(2);
50 
51         *a2 = 1;
52 
53         a3 = NULL;
54 
55         a3 = malloc(3);
56 
57         *a3 = 2;
58 
59         a4 = NULL;
60 
61         a4 = malloc(4);
62 
63         *a4 = 4;
64 
65         #endif
66 
67        #endif
68 
69 }

 

 

编译的时候就报错:

技术分享图片

 

可见 int const * a const; 的写法, 本身就是错误的, 我们将其改为:

Int const * const a; 然后继续编译。 编译没有警告和报错, 证明我们的语法是没问题的。

然后将第41行的#if 0 放开,编译。

然后报错如下:

 技术分享图片

 

通过以上报错我们可以总结如下:

const int a int const a1: 效果是一样,都代表了 a 的只读。

const int *a2: 给a2指针赋值(a2=NULL), 不报错, 但是给a2所在地址的值赋值(*a2 = 1) 则报错, 说明const 修饰的是值(*a2),而不是指针(a2)。

int * const a3: 给a3指针赋值(a3=NULL),报错, 但是给a3所在地址的值赋值(*a3 = 2) 则报错, 说明const 修饰的是指针(a3),而不是值(*a3)。

int const * const a4: 给a4指针赋值(a4=NULL),报错。给a4所在地址的值赋值(*a4 = 4) 也报错。则说明这样的修饰方式既不能给值赋值,也不能给指针赋值。

 

const 关键字

标签:efi   strong   str   div   std   验证   src   bsp   .com   

原文地址:https://www.cnblogs.com/syyxy/p/9270965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!