C语言中const和数组
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和数组的更多相关文章
- C/C++语言中const的用法
1. const 在C和C++中的区别 C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所 ...
- C-C++到底支不支持VLA以及两种语言中const的区别
C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面 ...
- C语言中Const与指针(转载)
一.说明指针常量.指向常量的指针和指向常量的常量指针的含义.区别和共同点 首先,以上三种概念的共同点:都指的是指针 指针也是一种变量,它存储指定类型的变量的内存地址,如char* 来声明一个字符型指针 ...
- C语言中const的用法总结
const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...
- C语言中const的正确用法
今天看<Linux内核编程>(Claudia Salzberg Podriguez等著)时,文中(p39)有一个错误,就是关于const的用法. 原文中举例说明:const int *x中 ...
- C语言中const关键字的用法
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理 ...
- C语言中const有什么用途
自己上网查的资料. 可以定义const常量,具有不可变性.例如:const int Max=100; Max++会产生错误; 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患.例如: v ...
- [原创]c语言中const与指针的用法
最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题: 1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a; ...
- 008_go语言中的Arrays数组
代码演示 package main import "fmt" func main() { var a [5]int fmt.Println("emp:", a) ...
随机推荐
- error: icpc: Command not found
交叉编译qt的程序时,出现错误:error: icpc: Command not found. 解决方法,详情查看链接. http://www.cnblogs.com/zengjfgit/p/4744 ...
- 【wikioi】3160 最长公共子串(后缀自动机)
http://codevs.cn/problem/3160/ sam的裸题...(之前写了spoj上另一题sam的题目,但是spoj被卡评测现在还没评测完QAQ打算写那题题解时再来详细介绍sam的.. ...
- No JSON object could be decoded
json中的true 不能写成True,否则不能被解析.
- 系统之间通讯方式—SOAP(web service)
[web service 简介] 是一种新的web应用程序分支,是自包含.自描述.模块化的应用,可以发布.定位.通过web调用.web service是一个应用组件,它逻辑性的为其他应用程序提供数据与 ...
- iOS开发中多线程基础
耗时操作演练 代码演练 编写耗时方法 - (void)longOperation { for (int i = 0; i < 10000; ++i) { NSLog(@"%@ %d&q ...
- 基于java 的websocket的聊天功能,一开始初始化websocket,执行打开连接之后就直接关闭连接了。
1 错误描述: java 后台没有报错,但是就是连接不上,一连上又自动关闭. 2 错误根源: 缺少jar包. 对比了报错的tomcat 的jar包和不报错的jar包 发现是tomcat下缺少上图绿色框 ...
- Vue基础-双向绑定:从 html 到 模板 到 渲染函数
Vue 测试版本:Vue.js v2.5.13 在 Vue 中,可以利用 v-model 语法糖实现数据的双向绑定,例如: <div id="app"> <inp ...
- Vue基础-渲染函数-插槽
Vue 测试版本:Vue.js v2.5.13 先看个插槽的例子: <div id="app"> <child > <span slot-scope= ...
- 160425、linux安装SVN服务器
1:查看linux是否已经安装svn服务 [root@nb ~]# rpm -qa subversion subversion-1.6.11-15.el6_7.x86_64 2:安装svn #yum ...
- 160412、DWR使用笔记
DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码.它的实现是基于ajax的,可以实现无刷新效果. 网上有不少DWR的例子,但大都 ...