文档章节

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

泡不烂的凉粉
 泡不烂的凉粉
发布于 2012/11/08 22:36
字数 1898
阅读 100
收藏 6
点赞 0
评论 0

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

写点东西是件轻松的事, 我从未将写内容当作是一种负担. 但是生活中总有一些事情会扰乱心神. 我是说我之前想把一篇内容写全,写丰富完整事实上我写的很短. 当然我知道很多内容都只是站在一个主观的角度去理解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
博文 15
码字总数 17961
作品 0
郑州
C语言的函数返回值

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

Jeff_Linux
2014/07/26
0
0
C语言指针讲解(三)

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

长风留言
2017/11/14
0
0
十三、指针和字符串

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

长平狐
2013/03/28
51
0
Objective-C语法之常用数据的那些事儿(二)

Objective-C语法之常用数据结构 由于工作重心发生了改变,Android开发暂时不会继续投入经历。MOMO最近在自学IOS游戏开发 哇咔咔~~目前还在学习阶段此篇文章主要用于备忘,欢迎各位大牛们给...

彭博
2012/03/09
143
0
C++基础知识学习:数组

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

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

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

PcDack
2017/12/04
0
0
C语言模拟实现strcpy函数,strcat函数,strcmp函数

字符串作为C语言中比较重要的一部分,学好这一部分需要我们多理解.分析。我们在学习的过程中先在脑海中有一个清晰的思路,根据这个思路在电脑上敲出来。刚开始学习字符串敲出来会有很多错误,...

柠檬dream
2017/10/26
0
0
一、C语言概述

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

长平狐
2013/03/28
109
1
深入学习PHP数组删除元素方法

学习PHP时,你可能会遇到PHP数组删除问题,这里将介绍PHP数组删除问题的解决方法,在这里拿出来和大家分享一下。学过C语言的人可能都知道,C语言对字符串的处理功能很强,PHP是用C写成的,自...

mickelfeng
2012/11/05
0
0
最早接触到的计算机编程语言——c语言

最早接触到的计算机编程语言——C语言 在经过入学后计算机导论的熏陶后,在大一的下半学期我终于接触到了一门语言,这也是我们最早接触的计算机编程语言——c语言。 在初学的时候,感觉这门课...

devops1024
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Git 基础 - 远程仓库的使用

远程仓库的使用 要参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某...

谢思华
6分钟前
0
0
面试宝典-悲观锁和乐观锁

悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。 乐观锁(Optimistic...

suyain
7分钟前
0
0
崛起于Springboot2.X之集成MongoDb使用mongoTemplate CRUD(27)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
17分钟前
0
0
切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
23分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
28分钟前
0
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
30分钟前
1
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
30分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
30分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
33分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部