C和指针Day1-快速上手

作者的话部分

以下部分尚未整理得富有条理。

C语言,覆盖了数据、语句、操作符、表达式、指针、函数、数组、字符串、结构和联合等等C语言话题。 

C可以独特地实现一些任务,如直接访问硬件。优秀C程序的效率几乎和汇编语言程序一样高,但明显C更加易于开发。

C缺乏一部分安全网特性,对数组下标和指针访问不做有效检查,但可以自己多写一段规避这类问题。

C给予程序员更多控制权,用来控制数据的存储位置和初始化过程。

丰富的操作符集合方便执行底层的计算,如移位和屏蔽等,方便C成为实现操作系统和嵌入性控制器软件的良好选择。

基于我对其他语言的优缺点并不了解,目前还无法体会出C在部分编辑效果上的优劣。

C语言最早被开发出来的时候,可以当作使用的标准是K&R C标准,非常老。之后国际组织发表的ANSI C(或称C89、C90,可以理解为同一标准),提高了C语言在不同机器上的可移植性,标准化必然带来这种结果。

但C89和C99之间就有明显的差别了,有些编译情况下会报错,需要我今后增加实践。如果碰到老式的编译器,我需要拥有同样能辨别使用的能力。

优秀的C++书籍把经历集中于面向对象模型有关的课题上(如类的设计),而不是再复述一遍基础的C技巧,这才是对的。

什么是基础呢?就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理等课程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能要有更深层次的把握。(机电出生的还真没学过部分课,如果要学的话感觉压力更大了。)

1.不了解数据结构和算法,就不会对程序的性能怎么优化,怎么从类库中选择合适的数据结构

2.不了解操作系统,就不了解这些开发工具的原理

3.不了解汇编,编译原理,就不知道程序运行时要多长时间多少内存,就不能编出高效的代码。

开始学习编程还是先学C和C++,系统api编程,他们更接近底层,学习他们就能搞清楚原理。

然后再多看一些经典书籍:算法导论,编程珠玑,代码大全,比较理论枯燥难懂。

第1章 快速上手

先说一下看的过程中自己的问题,本文在最前方摆放了一串代码,在自己不熟练的情况下,磕了太久以至于有点犯困,实际上在文章的后面对每一块细节都有注释,自己看书的方式显然也有问题。

一段C语言分为空白和注释、预处理指令(#inlcude、#define)、声明函数原型、main函数(程序执行的起点)。

如果有些声明需要用在不同的源文件里,可以在一个单独的文件中编写这些声明,这样之后使用只需要一份头文件声明的拷贝,避免了在维护这些代码时出现错误的可能性。

无返回值的函数称为过程,函数参数被声明const,这表示函数将不会修改函数调用者所传递的这两个参数。

在C语言中,数组参数是以引用的形式进行传递的,也就是传址调用,标量和常量是按值传递的。

C语言并不存在string数据类型,但字符串是一串以NUL字节结尾的字符,NUL作为字符串终止符,其本身不被看作是字符串的一部分。

“Hello”字符串常量,在内存中占据6个字节的空间,按顺序分别是H、e、l、l、o和NUL。

一个NUL字节指的是字节模式为全0的字节,类似”\0”这样的字节常量。

#if 0
    statements;
#endif    //注释多行代码更规范,防止注释的代码段内还有注释,引起错误

尝试scanf函数,&a,&b,&c前面的&是地址运算符,分别获得这三个变量的内存地址。所有标量前面都必须加上&,数组参数前面不需要。除了%c之外,所有输入值之前的空白(空格,制表符,换行符)都会被跳过,用%s输入字符串时,中间不能有空白。

int ch; ch作为整形,而事实上却用它来读取字符,是因为EOF是一个整型值,它的位数比字符类型要多,所以把ch声明为整型可以防止从输入读取的字符意外的被解释为EOF。字符只是小整数型而已,所以用一个整型变量容纳字符值并不会引起任何问题。

尝试puts函数,puts函数只能接收一个字符串作为参数,printf函数可以接收多个(Puts函数会将字符串输出到标准输出流(stdout)即显示器上,而printf函数可以定向输出到文件或其他设备)。尝试了putchar和getchar()函数,只读取输出一个字符。

简单函数之后做一个表格对比分析。

Printf可以格式化输出,puts只能输出字符串。

常用printf格式代码的几种格式符,无非是十进制转换成八进制,十进制还是十六进制的输出。但如果要把定义的数据类型为int的,转换为浮点值%g格式输出,会得到混乱的数据。

如果遇到特别长的输入行,可能没有办法防止gets函数溢出。这个漏洞是gets函数的缺陷,应该换用fgets函数。

如今软件开销的最大之处并非在于编写,而在于维护。所以需要书写正确的注释,并且在修改代码后注意注释的更新,注释如果不正确那还不如没有。

 C语言始终都要检查,确保数组不越界。但C语言并不执行数组下标的有效检查,因为C语言的设计初衷是追求效率和灵活性。

在C语言中,数组是一块连续的内存区域,通过下标可以直接访问数组中的元素。由于C语言的设计目标是尽可能地接近底层硬件,因此在编译时并不会对数组下标进行有效性检查。

效率:C语言的设计初衷是高效地操作内存,对数组下标进行有效性检查会增加额外的运行时开销。在大规模的数据处理和性能敏感的应用中,这种开销是不可接受的

灵活性:C语言允许程序员直接操作内存,包括指针运算和数组越界访问。这种灵活性使得C语言可以更好地适应各种底层硬件和操作系统的特性,同时也给了程序员更多的责任和自由。

本日个人疑惑

1.汇编语言还需了解

2.目前我并不理解面向对象模型的C语言程序设计,是什么,如何设计

3..net,j2ee,php,sqlserver,css,ajax全都一概不知,不过我目前仅需要把C学好就够了

4.查阅ASCII 码表

5.编写一个空循环体

6.编译器

7.了解各个标准库函数功能

8.需要标准输入的,在vscode中调试如何实现

并非需要尽早自问自答,部分内容或在今后的学习中加深印象。希望个人拖延症别作祟。

心理状况

因为这是第二第三遍看本书了,看的速度也依然很慢,我不理解。

拖延症,无法集中,半途而废,心理压力,浮躁,静不下心,各种debuff,看到其他人能适应解决开发过程中的各种问题,我连编辑软件的英文界面和文本都还不适应,多少是会焦虑的。

心里已经在想着这是最后一次学代码了,我毕竟也不是科班出身,实在干不了这行早点放弃也最好不过。

简单的代码也基本不是自己写的,非常惫懒,copy调试一下就完事了。

但一切又没有办法,我自己能力不行,想走捷径的话以后也会吃亏,要心平气和地慢慢来。

坚持,可以解决很多问题,只是见效实在太晚了。

昨天还看到AI音乐模型上知乎热点了,每次AI爆点都有种时不我待的感觉,世界看起来就特别两极分化,自己也是,一边想着摆烂不干了回家种田能活着就不错,另一边想着再努力卷一卷,趁着还没30岁找机会吃一波时代红利。

然后再讲讲自己的专注,对于我个人来说,因为真的很缺时间,但是是因为自己的坏习惯导致的。

1.热衷于收发消息,水群聊天,投机倒把(黄金,股市,热点新闻)

2.不想干活的时候就刷刷小视频

3.听音乐

4.经常地撰写规划而很难全部执行完毕

5.白日梦,幻想,脑内编故事

自己的专注必须要剔除这些东西,把手机放远,尽可能断网,手头有什么事情就先把手头的处理完了,总是拖延当DDL战士,生活就一直显得很匆忙了,精力就在不自觉间逃逸掉了。

最后再说说隔了一天没看发现有四个点赞一个收藏,本来觉得没人看也挺好的,反正就是自己的树洞,有人看还是有点小兴奋还是小紧张?虽然哪怕可能是机器人或者顺手点的?我也不知道平台是怎么推送的。总之谢谢。

其实这份也是存稿,这两天根本没怎么看,现阶段我尽快学习突破,无论花多少时间或许都是值得的(为什么语气不再肯定一点呢?)

英语

integrate整体的,一体化的        terminal终端        integrate terminal集成终端        column专栏,栏目

2024.3.27发布

  • 32
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值