C语言中const的用法

const:在定义变量时,如果使用关键字const,那就表示限制这个变量值不允许被改变。

(1)     修饰变量

const离谁越近,谁的值就不能改变.

int const a=0 声明一个变量a,把0赋值给a,用const修饰之后,a再也不能被赋其他值。此时int const a=0等价于const int a=0。

注:int const a;

a=0;

这样的写法是错误的,因为a已经被const修饰,不能被赋值了。

(2)     修饰指针

int const *p=&a

声明一个int类型的指针p,内存为p分了一个单元,里面存的是一个整型数据单元a的地址。*表示索引,*p就是根据a的地址找到该地址所对应的内存单元,取出里面存的值。*p的值就是内存单元p里的地址指向的值。然后const修饰了*p,表示那个整型数据不能被修改。也就是说整型单元a里的数据不能被修改。但是此时可以改p的值,p没有被const修饰。

此时int const *p=&a等价于const int *p。

int * const p=&a

声明一个int类型的指针p,内存为p分了一个单元,里面存的是一个整型数据单元a的地址。*表示索引,*p就是根据a的地址找到该地址所对应的内存单元,取出里面存的值。*p的值就是内存单元p里的地址指向的值。然后const修饰了p,表示内存单元p不能重新被赋值,只要p没被释放,p中存的只能是此时a的地址(p=&b就是错误的)。但是此时*p没有被const修饰,所以我们可以通过*p来改整型单元a中存的值(*p=b;)。把b的值赋给a。

const int* const p

p的值被const修饰了,*p也被const修饰了。所以p的值不能被修改,*p也不能被修改(p=&b;*p=b;都是错误的)。

一维数组

 

   数组:一组数据的整体。当你定义一个数组时,内存会为你分配一块连续的存储单元。数字中的每个数据都会依次存入这块连续的单元中。

int a[4]={1,2,3,4};

声明一个整型数组,该数组有四个元素,数组名为a,同时也是该数组的首地址。我们可以通过偏移量来访问数组的每个元素。

数组指针和指针数组

 

数组指针:

声明一个指针,然后让这个指针指向一个数组。

int a[5]={0};

int *p=a;

让p指向数组a。把数组的首地址a赋值给p。同样我们可以用指针加上偏移量访问元素(*(p+偏移量))。

 指针数组:

定义一个数组,这个数组里存放的每个元素都是相同类型的指针。

int * p[4];

定义一个数组p,有四个元素,该数组的类型为int *(整型指针)。所以这四个元素的类型都是int *。

C语言中const和数组的更多相关文章

  1. C/C++语言中const的用法

    1. const 在C和C++中的区别     C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所 ...

  2. C-C++到底支不支持VLA以及两种语言中const的区别

    C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面 ...

  3. C语言中Const与指针(转载)

    一.说明指针常量.指向常量的指针和指向常量的常量指针的含义.区别和共同点 首先,以上三种概念的共同点:都指的是指针 指针也是一种变量,它存储指定类型的变量的内存地址,如char* 来声明一个字符型指针 ...

  4. C语言中const的用法总结

          const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...

  5. C语言中const的正确用法

    今天看<Linux内核编程>(Claudia Salzberg Podriguez等著)时,文中(p39)有一个错误,就是关于const的用法. 原文中举例说明:const int *x中 ...

  6. C语言中const关键字的用法

    关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理 ...

  7. C语言中const有什么用途

    自己上网查的资料. 可以定义const常量,具有不可变性.例如:const int Max=100; Max++会产生错误; 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患.例如: v ...

  8. [原创]c语言中const与指针的用法

    最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题:   1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a;  ...

  9. 008_go语言中的Arrays数组

    代码演示 package main import "fmt" func main() { var a [5]int fmt.Println("emp:", a) ...

随机推荐

  1. html5shiv.js分析-读源码之javascript系列

    xiaolingzi 发表于 2012-05-31 23:42:29 首先,我们先了解一下html5shiv.js是什么. html5shiv.js是一套实现让ie低版本等浏览器支持html5标签的解 ...

  2. /sys/kernel/debug/gpio

    在使用GPIO的时候,有时候不知道GPIO的状态,也不知道在内核中GPIO是否申请成功. 可以通过/sys/kernel/debug/gpio这个文件来查看.这个文件显示了申请成功的GPIO的输入输出 ...

  3. java----序列化与反序列化中及java序列化本质就是存储一个对象,然后在其他地方在调用它

    Java 序列化Serializable详解(附详细例子) 1.什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是 ...

  4. java----内部类与匿名内部类的各种注意事项与知识点

    Java 内部类分四种:成员内部类.局部内部类.静态内部类和匿名内部类.1.成员内部类: 即作为外部类的一个成员存在,与外部类的属性.方法并列.注意:成员内部类中不能定义静态变量,但可以访问外部类的所 ...

  5. php -- 用文本来存储内容,file_put_contents,serialize,unserialize

    根据存储的内容来划分 字符串: file_put_contents :将一个字符串写入文件 语法:int file_put_contents ( string $filename , mixed $d ...

  6. 通过公网IP主机建立ssh隧道

    环境描述 hostA: 有公网IP的linux主机 hostB: 私有路由器后端无公网IPlinux主机,能够ssh连接到hostA hostC: 个人pc机 隧道创建步骤 step1 在hostB上 ...

  7. angularJs上传文件(非form上传)

    angular.js:13920 Broken interceptor detected: Config object not supplied in rejection: <input typ ...

  8. Linux命令之乐--md5sum

    md5sum命令用于生成和校验文件的md5值.它会逐位对文件的内容进行校验,它常用于检查文件的完整性. 读取文件的MD5值 [root@new ~]# md5sum /usr/local/sbin/* ...

  9. 总结界面框架_UI_Adapter

    本人定期更新经典案例及解决方案如有疑问请联系我QQ1822282728 -- 277627117   下面是常用到的ui  Demo 安卓三级筛选菜单listview(非常经典) http://dow ...

  10. java基础---->string字面量的使用

    这里简单的理解一下java中关于string字面量的知识,关于字节码可以使用java自带的javap工具查看. string字面量 一.直接贴出测试的代码 A string literal alway ...