


全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于指针,数组,二级指针,数组指针,指针数组首先,在C语言中,最难的就是定义变量,给变量赋值。其实所有的C程序拉出来看到的都是在定义变量,给变量赋值,中间的程序通过运算得到的结果,也可以算是给变量赋值。 (一)先说定义变量: 因为变量名都是自己定义的标示符,然后最重要的就是变量的类型了。虽然大多C语言书上 都列举出了众多的数据类型,但是个人理解,那些都是最基本的一些东西,其实还有很多中类型 我们经常遇到,却不知道 这些还是数据的类型。 一,指针类型; int * ,short *,char *, int *,char*, long int *; 这些都是指针类型,很显然,可以看出 指针类型就是在基本数据类型前面加个*,例如定义一个指针变量, int * p; 这个变量p,就有两种含义,第一是,这是一个指针变量,第二是他指向int类型。 我们都知道对于32位pc机,指针变量都是四个字节。 int * p;对于变量p,也有两个含义,第一这是一个指针变量,第二,它指向一个int*类型. 二,数组类型。 这里估计,有人就质疑了,C语言里面还有数组类型吗?有。并且我们一直在写,一直在用,我们一直不知道,是因为C语言的书写方式导致我们不知道有这种类型。对于一个一维数组, int a10; C语言的书是这样解释这个东西的,这是个一维数组,也就是一次性定义了十个变量。在内存中呈线性排列。 其实我个人理解这个东西应该这样定义,这是一(个包含10个int元素的 类型的)变量。我们在描述一个变量的时候,总说,这是一个XXX类型的变量,所以在这里对于int a10;应该这样描述,这是一个有10个int元素的 类型的变量a;所以写成这样 int 10 a; 这是一个变量但是它包含十个元素,这是不是跟我们学过的一个东西特别像? 结构体, 结构体不就是包含里XXX 元素的类型 ,然后用这种类型定义了一个变量,叫做结构体变量。C语言给结构体类型起名字了,却没给数组类型起名字,所以我们不知道。但是定义数组的时候写成int 10 a; 这样 很多编译器 都编译不通过,或者说没有编译器认识它,之所以这样写,只是要明白,数组的原理,因为后面对于能正确理解数组指针,至关重要。 三,指针数组; 指针数组很简单,就是int * a10; 类型换了一下而已,按照上面的解释更直观一点写成int *10 a;这样,就可以解释为,定义了(一个包含10个指针类型元素的 )这种类型的变量 a; 四,数组指针, 若看完了上面对于数组类型的 解释以后,对于数组指针是不是已经很简单了。 定义一个指针数组类型的变量 是 int *a10;前面说了 ,更直观的写成: int*10 a; 那么定义一个指针变量,就是在原有类型前面加一个*,也就是int* 10 * p; 但是C语言里面不能这样写, 规定要把10 写到后面,所以就成了int *p10; 但是现在这样就有个问题了,之前有个10在中间隔开,倒是可以区别,(int *10)* p;现在10写到了后面,无法区别这两个*,到底属于那边的,加空格没作用,所以只能加最有权威的分隔符()那么就成了 int *(*p)10;这里定义了一个指向(有10个int*类型元素的数组)的类型的 变量p; 不好意思,这里有些太绕口,不好理解,确实不好理解,之所以不好理解,是因为我们书写习惯了,看习惯了目前C的这种书写形式,对一些东西根深蒂固。就像很多新人最开始学习指针的时候都是这样定义的,int *p;这样写虽能编译通过,但是他已经把指针理解错了, 指针不就是一个普通变量,int * p;就是一个变量p,类型是 int *类型。.对于学习C语言的新人,要永远记住,对于任何变量,都是某某某类型 的一个变量。 这个类型可以是任何类型。 不光是书上的那几种类型,有很多类型都是我们自己定义的,例如int * 这种类型。 上面说了这么多,最重要的是最近看到前面有几个帖子对于指针和数组。有很多新人都很纠结,这个东西理解很容易进入误区,因为这所有东西都是建立在编译器的前提下的。或许你理解的是对的,但是编译没通过,你会认为这是错的,其实没必要理解是一回事,编译是另一回事; 五;关于数组和数组名,以及数组指针赋值。 对于一维数组int a10; 它有10个int 类型的元素 在内存单元中呈线性排列,首元素的地址就是这个数组的首地址,也就是 &a0, 但是C语法规定可以简写成a; 就在这里出现了一个严重的问题,我之前说的 inta10;等于是个int 10 a;通俗一点说就是int 10 类型的变量a;所以a的类型就是int 10, 这就是为什么printf(%dn,sizeof(a);会打印出40,因为a 是一个拥有十个元素的数组类型的变量。但是前面说了C语法里面吧&a0简写成a;用过指针的童鞋应该都知道 对于XXX类型的变量,前面加个&。(&变量名)这就是一个表达式了,而这个表达式的类型就是这个变量原来的某某某类型加个* 就是*类型,所以&a0的类型就是int *类型了 ,所以定义一个指针变量,int * p=&a0;/p=a;这样都正确,(但是按照我的理论,p=a;能编译通过,a的类型是int 10类型,p是int* 类型,p=a能编译通过不是偶然而是必然,绝不是因为a是&a0的简写,而是我个人认为int10跟int* 类型本来就匹配。是同一种类型(推理过程下文有详解),因为赋值两边类型匹配。无可厚非都是int *类型。 若定义一个数组指针 int (*p)10, 这里p的类型是int (*)10 按我之前的书写方式就是int 10* ;这种类型,很直观.对于数组 int a10,刚才说了 a的类型是 int10,所以&a这个表达式的类型就是 int10*类型的。所以 int a10;int (*p)10;p=&a;这样可以赋值,因为两边类型匹配,无可厚非。这不是谁规定的,真理都是有根据的。 下面解释下二维数组;在说二维数组之前,先解释下刚才留下的那个问题:就是int 10 这个类型跟int *类型为什么匹配的问题,对于一维数组int10 a; int b; b=*a; 这样没有问题吧,那就说明*a的类型跟b的类型一致,都是int 类型,a的类型本来是int 10 *a就成了int 类型.。大家都知道 只有对于一个指针变量,也就是带*号的类型的表达式 才可以(*非常量表达式),这样之后表达式的类型就变成原来的类型去掉一个*,例如int * m; *m的类型就是 int*. 想必这大家都知道吧。回到原题a是int 10类型的,*a成了int 类型,所以int10 ,也可以看成是int *类型,两者“本是同根生,书写却不同”。这就很明了为什么:int a10; int * p=a;这样了。 对于二维数组 int a510;可以写成int 10 a5; 继续(int 10)5 a;这里 的小括号至关重要,我这样写可能大家一时半会反应不过来,但是你若认真的看完了前面我对一维数组的解释之后,并且看懂的话这个就不难看懂。 我只所以再不用通俗语言去解释这个东西,是因为C里面不能这样写,并且没有给这种东西起名字,不像结构体,结构体数组。都有名字,其实这个跟结构体就是一回事,都是个大变量,里面包含很多元素。同一个道理的,闲话不扯,入正题。前面刚解释了对于XXX这种类型跟XXX*这种类型是相同的。那么a的类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年服装行业可持续时尚发展前景研究报告
- 商场女装销售培训课件
- 2025年生态旅游行业创新设计及市场前景研究报告
- 2025年房地产行业智能家居技术应用前景研究报告
- 2025年物联网产业自动驾驶技术应用前景与未来发展趋势研究报告
- 2025年医疗大数据行业创新应用与市场前景研究报告
- 国家事业单位招聘2025商务部外贸发展事务局招聘23人笔试历年参考题库附带答案详解
- 四川省2025上半年四川西南医科大学考核招聘高层次人才20人笔试历年参考题库附带答案详解
- 北京市2025中央民族乐团应届毕业生招聘4人笔试历年参考题库附带答案详解
- 五大连池市2025黑龙江黑河市五大连池风景区农业农村乡村振兴服务中心招聘1名公益性岗笔试历年参考题库附带答案详解
- 2025秋人教鄂教版(2024)科学一年级第一单元走近科学《1“钓鱼”游戏》 教学设计
- 食品腐烂变质安全培训课件
- 隧道施工车辆安全培训课件
- 2025网络设备购销合同文本
- 2025年山东省东营市辅警协警笔试笔试预测试题(附答案)
- 风机高空作业安全培训课件
- 2024-2025学年南充市七年级下英语期末考试题(含答案和音频)
- 成都产业投资集团有限公司所属产业投资板块企业2025年招聘投资管理等岗位的考试参考试题及答案解析
- 2025年法院书记员招聘考试笔试试题含答案
- 重阳节活动致辞
- 地下室结构施工课件
评论
0/150
提交评论