当前位置: 首页 > news >正文

Linux编程笔记1-概念数据类型输入输出

简介

        本次重新学习C,但是区别在于基于LInux上的gcc和make等,最原始的环境。

        本系列会默认有一定的C语言能力的,所以会跳过一些我自己认为基础的东西,从而重点去提自己不熟的地方。


一、介绍 

main 函数在不同的环境中有不同的传参和接参情况:

程序运行:

                        C源文件——预处理——编译——链接——可执行文件

编译器gcc

man gcc查看gcc手册

执行程序

执行hello.c文件(方法一:标准版)

预处理:

                gcc -E hello.c

        宏以#的语句在此状态下被解决

        gcc -E hello.c > hello.i  

        将预处理的结果保存对应后缀名的文件

编译

        gcc -S hello.i

        此时就将预处理后的文件编译为汇编文件

        gcc -c hello.s

        生成hello.o的文件,此时就不能直观的看懂文件了

链接

        gcc hello.o -o hello

可执行文件

        ./hello

执行hello.c文件(方法二:简便版)

直接gcc hello.c

gcc hello.c -Wall :打印出所有警告信息

生成a.out文件:此文件就已经执行了之前所有的操作了

最后 ./a.out

执行hello.c文件(方法三:简便版)

gcc hello.c -o Myhello

 ./Myhello

执行hello.c文件(方法四:用make)

cc:Gcc编译器,直接自动执行


Vim:常用指令:ctrl+p:跳出相关关键字

vim * -p会打开当前目录下所有的文件,gt切换文件编辑

Man 函数名:检索函数操作


基本概念:

算法:解决问题的方法;

程序:用某种语言实现算法

进程:程序开始执行时,出现进程

防止写越界,防止内存泄露,谁打开谁关闭,谁申请谁释放

注意:

        1.exit和return 0 的区别?

答:return 是语言级别的关键字,表示函数返回;而 exit() 是系统级别的函数,表示进程退出。

        2.echo $?什么意思?

答:输出对应的进程信息,echo $? 的意思是:显示上一条命令的退出状态码

        3.#if 。。。#endif的意义

答:告诉编译器,只有在满足特定条件时,才编译它们包裹起来的代码。否则,这些代码在编译前就会被预处理阶段直接移除,就像它们从未存在过一样。

        4.Float类型:存在失真的情况,因为本身就是不精确的数,所以无法真正的去比较一个数:大数吃小数:小数的精度高会被大数吞——解决方法?

答:本身的比较是不适合的;可以换更高精度的或者用一定的计算公式来比较

二、数据类型、运算符和表达式

  1. 所占字节数
  2. 存储区别
  3. 不同类型的数据间进行转换
  4. 特殊性: 布尔型

Float类型:存在失真的情况,因为本身就是不精确的数,所以无法真正的去比较一个数:大数吃小数:小数的精度高会被大数吞

Char型是否有符号

不同形式的0值:0、‘0’、“0”、‘\0’

变量和常量:

常量:

整形常量

实型常量:3.14

字符常量:单引号引起来的单个字符和转义字符

字符串常量:双引号引起来的一个或多个字符组成的

标识常量:#define修饰的量,宏会把对应的参数直接替换,注意++/--符号

Gcc -E define.c

变量


存储空间堆:动态内容存储;栈:临时空间,默认;——变量申请,需要通过编译器来决定


存储类型:

Auto:默认,默认值为随机值,自动分配空间,自动回收空间

Static:静态型,自动初始化为0或空值,并值其变量的值具有继承性,只用一块空间;不能跨文件

Register:寄存器类型,只能用来局部变量,大小有限制,只能定义32位;寄存器内部无地址,所以一个寄存器类型的变量无法打印出地址查看或使用。

Extern:说明型,意味着不能改变被说明的变量

运算符和表达式:

特殊用法:

1.取模必须是整数;

2.逻辑运算符:短路原则:

当前面的表达式为0时,在与运算中会直接为0,导致后面的表达式短路,最终打印m=0,n=1;

3.重点——位运算

三、输入&输出专题

1.格式化IO函数:scanf、printf

        int printf(const char *restrict format, ...);

                        Format:“%(修饰符)格式字符”,输出表项

格式字符

        %e:科学计数法

修饰符

注意:L和LL:在进行大数据计算时,需要考虑

        int scanf(const char *restrict format, ...);——输入值符合,则返回值为1,否则为0

        Scanf(”%*c%c“,&ch);——*抑制符,相当吃掉了ch前面的杂项字符

        输入输出%s:可能存在溢出的风险

2.字符IO函数:getchar、putchar

                int getchar(void);

                int putchar(int c);

3.字符串IO函数:gets、puts

这个函数很危险,因为对缓冲区不会对任何检查,一般用char *fgets(char s[restrict .size], int size, FILE *restrict stream)来替换或者getline

                int getc(FILE *stream);

                int puts(const char *s);

        1.getline完全替换gets() ?

答:getline(char **lineptr, size_t *n, FILE *stream);

        2.%e:科学计数法?

答:当使用 printf 和 %e 时,它会将浮点数以科学计数法的形式打印出来。格式: [-]d.ddd...e[+/-]ddd

  • d:表示一个数字。

  • .:小数点。

  • e:指数标记(在有些系统或区域设置下也可能显示为大写的 E)。

  • [+/-]:指数的符号(正数时通常也会显示 + 号)。

  • ddd:指数部分,通常至少为两位数字,不足时补零

        3.Printf 和 fprintf的区别?

答:

  • printf(...) 是 fprintf(stdout, ...) 的简化形式。

  • fprintf() 是通用函数,可以指定输出到任何文件流。


文章转载自:

http://yHjaI4r8.qstkk.cn
http://DBttVqIn.qstkk.cn
http://mh9GADiF.qstkk.cn
http://SLCzn10a.qstkk.cn
http://oIsqAqSD.qstkk.cn
http://Pua0tmXM.qstkk.cn
http://4a1wogP1.qstkk.cn
http://hzx6OuuC.qstkk.cn
http://XkjoAuUt.qstkk.cn
http://0LBNBxNK.qstkk.cn
http://C04eaZXw.qstkk.cn
http://XSQ4rxZk.qstkk.cn
http://yEoeLnQa.qstkk.cn
http://HUuO20TO.qstkk.cn
http://1F1kZNeu.qstkk.cn
http://4WEZa7d7.qstkk.cn
http://MYFPq4M3.qstkk.cn
http://ERGFHn23.qstkk.cn
http://1eQqW9I9.qstkk.cn
http://PFwPI3di.qstkk.cn
http://waKPjdlF.qstkk.cn
http://q5uDz8n8.qstkk.cn
http://ZUnUR7Uw.qstkk.cn
http://CdGJbrYy.qstkk.cn
http://M9huyz2s.qstkk.cn
http://PGI2Pufs.qstkk.cn
http://7Uz78sPN.qstkk.cn
http://JtmMS1gb.qstkk.cn
http://eeKgvDgg.qstkk.cn
http://0U691QvG.qstkk.cn
http://www.dtcms.com/a/376357.html

相关文章:

  • 认知语义学对人工智能自然语言处理的影响与启示:从理论融合到未来展望
  • Markdown 介绍和使用教程
  • 实习——配置电源管理策略
  • Es6新特性总结
  • 【云原生网络篇】从 Private Endpoint 到 K8s Pod 对外注册:一次网络底层的全面探究
  • 老梁聊全栈系列:(阶段一)从单体到云原生的演进脉络
  • AI 模型训练过程中参数用BF16转向FP16的原因
  • win11,安装c++版OpenCV,带cuda
  • openEuler 24.03 (LTS-SP2)简单KVM安装+桥接模式
  • websocket 服务器往客户端发送的数据要加掩码覆盖吗?
  • LLM大语言模型部署到本地(个人总结)
  • TanStack Query Vue -vue的Axios Hooks
  • 鸿蒙应用之网络请求方案总结
  • 技术文章大纲:AI绘画—动漫角色生成赛
  • HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践
  • 【iOS】单例模式
  • 工业智能终端赋能自动化生产线建设数字化管理
  • 在Vue项目中Axios发起请求时的小知识
  • eclipse怎么把项目设为web
  • 三维GIS开发实战!Cesium + CZML 实现火箭飞行与分离的 3D 动态模拟
  • Hybrid应用性能优化实战分享(本文iOS 与 H5为例,安卓同理)
  • Python 常用数据类型详解:相同点、差异与使用指南
  • Elasticsearch安装启动常见问题全解析
  • webpack turbopack vite 前端打包工具
  • NLP项目实战 | Word2Vec对比Glove进行词类比测试
  • 基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning算法研究(matlab)
  • 南京大学 LLM开发基础(一)前向反向传播搭建
  • GitHub 热榜项目 - 日榜(2025-09-10)
  • 基于YOLO集成模型的无人机多光谱风电部件缺陷检测
  • ssh域名过期,消息推送到企业微信