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. Tensorflow 梯度下降实例

    # coding: utf-8 # #### 假设我们要最小化函数 $y=x^2$, 选择初始点 $x_0=5$ # #### 1. 学习率为1的时候,x在5和-5之间震荡. # In[1]: imp ...

  2. 使用AngularJS实现的前后端分离的数据交互过程

    一. AngularJS简介 AngularJS是什么 AngularJS是一个开源Web应用程序框架.最初是由MISKO Hevery和Adam Abrons于2009年开发,现在是由谷歌维护. A ...

  3. 在XML中用于注释的符号是。(选择1项)

    A.<!– –> B.<?– –?> C.<% %> D.<!– –!> 解答:A

  4. 【NOIP模拟题】Permutation(dp+高精度)

    首先我们可以这样想: 设状态f[i, j]表示1-i序列有j个'<'的方案数 那么考虑转移 因为i比i-1大,所以可以考虑从i-1来转移.首先i是要插入1-i-1这个序列的,所以我们可以思考插入 ...

  5. Run time setting设置详解

    Pacing转载自belie 1>     Run time setting设置中的Browser:‘Simulate a new user on each iteration’选项例如:录制了 ...

  6. 【python】matplotlib中文乱码问题

    http://www.pythoner.com/200.html 改matplotlibrc文件进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目 ...

  7. 漫游Kafka设计篇之消息传输的事务定义(5)

    之前讨论了consumer和producer是怎么工作的,现在来讨论一下数据传输方面.数据传输的事务定义通常有以下三种级别: 最多一次: 消息不会被重复发送,最多被传输一次,但也有可能一次不传输. 最 ...

  8. C#中DllImport用法汇总

    最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比 ...

  9. Laravel5.1 搭建博客 --编译前端文件

    上篇文章写了Gulp编译前端文件,这篇记录下在搭建博客中使用Gulp 1 引入bootstrap和js 1.1 首先先在项目本地安装Bower sudo npm install bower 1.2 创 ...

  10. Linux命令之乐--md5sum

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