文档章节

C语言学习之 数组,指针,字符串. (三)

泡不烂的凉粉
 泡不烂的凉粉
发布于 2012/11/08 22:36
字数 1898
阅读 101
收藏 6

保持一贯的风格, 进入正题之前,先写一段废话.

写点东西是件轻松的事, 我从未将写内容当作是一种负担. 但是生活中总有一些事情会扰乱心神. 我是说我之前想把一篇内容写全,写丰富完整事实上我写的很短. 当然我知道很多内容都只是站在一个主观的角度去理解C. 当然里面也会是错误百出.无论怎样,它记录了我当时的学习进度,代表当前状态以及对C这门语言的理解程度. 或许以后重读旧文的时候,会认为自己是多么的无知. 更重要的是,我觉得文字能记录自己当时的情景. 
 思绪总是很乱, 很多时候我都是在写着写着,然后有了思路,就知道该如何去做, 很多事情也是. 希望这篇也会慢慢进入状态.我觉得有点混乱了. 内容穿插不起来,形成不了主线. 无论结果怎样, 保持一种阵型好了. "赶快去做".

上篇内容主要给出的还是一个小例子, 之前也有提过, 主要是关于 typedef , 类型, 数组的本质, 通过指针访问数组. 期间还是一个小魔法. 用一个指定的类型指针指向一个数组. 通过这个指针访问数组的内容.  这种方式是一种魔法, 但是在C里面很管用.C里面到处都用得到.  透过表象理解本质最重要. 数组访问方式只是指针访问的一种很人性化的方式而已. 我们不应该惧怕它. 相反.我们更好的利用它.  

计算机的本质是数字计算机. 要是深究起来, 一切都是数字,  说到编程. 机器语言是最直接的方式. 可我们没有必要任何事情都用机器语言来操作机器,C语言就是让人读的, 写的程序恰巧可以让机器运行. 所以里面的一些概念用一些更人性化的方式来表述.
 好的代码在排除了基本功能,让机器能运行之外. 保证使用它的人能读懂也是很重要的一条.  C语言在这方面把握的很到位. 既有低级语言的特性, 有不缺乏高举语言的表示形式. 我们学习它,就应该学习它的优点, 尽量避免它的缺点,尽可能写出更人性化的,更易懂的代码.   C语言里字符串的形式就非常的有意思. 有一些很常见的关于字符串的形式.  也很人性化.
char a[]="hello world!";
const char *a="hello world!":
第一种是标准的方式, 第二种, 会初始化一个指针a 并将 字符串的地址放进去a里面. 很多工作都被 程序代替了. 人要做的相对少很多.

之前提到过 typedef ,  其实 typedef 的应用很多很多.  结构化方面, 它的功劳不容忽视.
还记得char short int long 这些内容吗? 都是类型.用来修饰变量的. 变量都占有存储空间, 空间的大小就是根据 这些决定的.  C 在这方面也做很有人性化, 服务很到位. 它有 其它 概念来服务.这些复杂的内容. 结构 struct, 联合 union, 枚举 enum. 这些数据类型都很有意思.  如果和 typedef 配合使用 就可以方便的 用自己定义的数据类型来说明代码,使之更容易理解.
struct stu_a { char x;}; struct stu_a val; 和 struct stu_a{char x;}  val;的方式是一样的.
更好的方式是利用 typedef struct {char x;} STR_A ; STR_A val; 这样的方式会有一个 自定义类型 STR_A 却不会产生 像前两个 stu_a 结构名. 

在  struct stu_a {char x;} ; 语句中, 说明的只是有一个 结构,名字是 stu_a;  如果之后 用语句 stu_a val; 试图声明一个变量是会出错的. stu_a 只是一个结构的名字.  但是如果加上  typedef struct stu_a stu_a; 后, stu_a 就可以作为一个类型了. 此时 如果用 stu_a val ; 那么 stu_a 就是一个 类型名; 如果用 struct stu_a val; 那么 stu_a 就是一个结构名.  有了typedef的存在, C语言变得很人性化.事情都简单多了.  这些都很灵活. 怎么应用, 还是看每个人的习惯.

在数组,指针,字符串里面穿插这些介绍. 也不是毫无目的.

这些内容都是基本的概念, 在应用中.没必要去探究那么难懂的细节. 我们的目的只有一个,写出逻辑清晰,结构简单的表达准确的代码.  以上这些只是为了这个目的存在的.  然我们尽量去回避那些让人摸不透的东西. 让我们用数组的东西去处理那些有类似行为的变量. 而不是用指针. 例子中指针只是让我们更好的去了解数组的本质. 在应用中. 还是用人性化的东西比较好. 指针是神奇的魔法. 它能的目的不是扰乱我们的思路. 它应该为 简化问题 这个目的存在的.

其实这个草稿我都写好有些日子了.一直存放在草稿箱里. 原本准备贴点实用的例子, 后来发现那不现实. 那样会让文章用无结束. 例子是应用程序的话,一切应用都可以再好点.  这些例子不应该是用来秀的.

数组,指针,字符串. 重点还是受指针. C语言里.指针是个非常优美的东西. 指针 是有名字的. 指针又存储空间, 指针存储空间里存放的是一个地址. 声明的时候 可以 初始化这个指针, 声明的类型 可以是强制转换的. 可以增加对指针变来那个增加 const 来限制 指针不可更改,也可以限制 指向的内容不可更改.  指针操作时本质, 数组形式是我们人性化的操作方式. 如果有选择,我们应该习惯用数组方式, 用数字下标来访问内容. 但是了解指针的本质能让我们更好的利用指针实现类似于数组的方式访问内容.

结构, 类型,  很不好叙述清楚的东西. 结构,联合, 这些可以认为是一种存储方方式的定制,   typedef 可以理解成用来定义类型的. 每一种类型 都有自己的存储方式. 结构以及联合属于混了型机构. 可以定义个各种结构,  变量 声明的时候需要的是类型, 类型不仅有结构,还有存储位置,编译链接后形成最终可执行文件过程中. 会留给已经声明的变量存储空间的.  但是类型却不一定有存储空间.

数据结构. 编程的目的是解决实际问题. 用数学的方式来处理问题, 是一种抽象的概念.
现实生活中会有很多相关的内容, 不止有数字,字符串, 相关的内容有组织的放在一起会形成数组形式.

好吧,就这样停住吧. 

© 著作权归作者所有

共有 人打赏支持
泡不烂的凉粉
粉丝 38
博文 16
码字总数 18217
作品 0
郑州
私信 提问
C语言指针讲解(三)

谨记 哎,我......觉得你变了,我怎么变了?你以前是那么的听话,那么的在乎我,总是想象美好的生活而奋斗,遇到困难不断的去尝试克服,生活的态度总是那样积极向上的。而如今的你,变得总是...

长风留言
2017/11/14
0
0
C语言的函数返回值

一:背景 谈到C语言的函数返回值,可能会感觉很亲切,不就是一个函数返回值嘛,当初学C语言的时候早就学过了很easy嘛,我曾经也是这么想的。后来要上研究生了,研究生阶段搞得就是C,所以又重...

Jeff_Linux
2014/07/26
0
0
十三、指针和字符串

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 字符串回顾 一个字...

长平狐
2013/03/28
51
0
C++基础知识学习:数组

一、数组 1. 定义数组 数组是由类型名,标识符和维数组成的复合数据类型。其中,类型名可以是内置类型或类类型,除引用之外,数组元素的类型还可以是任意的复合类型。 数组的维数必须用大于等...

wqli
2016/06/15
36
0
C语言数组与指针一本道来

数组与指针.png 一本道来其他系列 C语言关键字 C语言注释符号一本道来 C语言编译预处理技术一本道来 指针的基础 注意本节内容可能在gcc下不能完成编译,请切换到Windows平台,使用或其他 指针...

PcDack
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
4
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
3
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部