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

10.24学习

1.const

在编程中, const  关键字通常用来定义一个常量。常量是程序运行期间其值不能被改变的变量。使用  const  可以提高代码的可读性和可靠性,因为它可以防止程序中意外修改这些值。

不同编程语言中  const  的用法可能略有不同,以下是一些常见的用法:

①C/C++:

在 C 语言中, const  关键字用于定义一个只读变量,其值在初始化后不能被改变。

在 C++ 中, const  可以用于变量、函数参数、成员函数等,表示它们不会修改对象的状态。

②JavaScript:

在 ES6(ECMAScript 2015)及以后的版本中, const  用于声明一个只读的常量。一旦一个常量被声明并初始化后,其值不能被重新赋值。

③Python:

Python 中没有  const  关键字,但通常约定使用全部大写的变量名来表示常量。

④Java:

Java 没有  const  关键字,但可以使用  final  关键字来声明一个不可变的变量。

⑤Swift:

Swift 中使用  let  来声明常量,一旦赋值后,其值不能被改变。

使用  const  的一个简单例子(以 JavaScript 为例):

const MAX_USERS = 100;

console.log(MAX_USERS); // 输出 100

// 下面的代码会抛出错误,因为 MAX_USERS 是一个常量,不能被重新赋值

// MAX_USERS = 200;

在不同的编程环境中, const  的具体行为和限制可能会有所不同,但基本概念是相似的。

 

 

2.printf()函数

 printf() 函数是C语言中用于格式化输出的标准库函数,它定义在 stdio.h 头文件中。以下是 printf() 函数的一些关键知识点:

①函数原型:

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

 printf() 函数的第一个参数是一个格式字符串,后面的参数是可变数量的,根据格式字符串中的格式说明符来决定。

②格式字符串: 格式字符串包含了普通字符和格式说明符。普通字符直接输出,格式说明符用于指定后续参数的输出格式。

③格式说明符: 格式说明符以 % 开始,后面可以跟有:

标志字符(如 + 、 - 、 0 、 # 等)

宽度指定符(如 5d 表示至少5位宽)

精度指定符(如 .2f 表示小数点后两位)

长度修饰符(如 h 、 l 、 ll 等)

类型说明符(如 d 、 f 、 s 、 c 、 % 等)

④类型说明符:

 %d  或  %i :整数( int 类型)

 %u :无符号整数( unsigned int 类型)

 %f :浮点数( float 或 double 类型)

 %s :字符串( char 数组)

 %c :字符( char 类型)

 %x  或  %X :十六进制整数

 %p :指针(显示为十六进制)

 %% :输出百分号本身

⑤返回值:  printf() 函数返回成功输出的字符数。如果发生错误,它返回一个负数。

⑥可变参数:  printf() 函数使用C语言的可变参数机制,这允许函数接受不定数量的参数。

⑦使用例子:

printf("Integer: %d\n", 10);

printf("Float: %.2f\n", 3.14159);

printf("String: %s\n", "Hello, World!");

printf("Char: %c\n", 'A');

⑧格式化选项:

 %+d :显示正负号

 %05d :至少5位宽,不足补0

 %-5d :左对齐输出

 %5.2f :浮点数总宽度为5,小数点后两位

⑨错误处理:  printf() 函数不会对错误的格式字符串进行报错,如果格式字符串与提供的参数不匹配,可能会导致不可预测的行为。

⑩安全性:

避免格式化字符串的注入攻击,确保格式字符串是受控的,不被用户输入直接控制。

对于用户提供的数据,使用 snprintf() 等安全版本的函数,以避免缓冲区溢出。

⑪与 sprintf() 的区别:

 printf() 将格式化的数据输出到标准输出(通常是屏幕)。

 sprintf() 将格式化的数据存储到一个字符串中,而不是输出到屏幕。

 printf() 函数是C语言中非常基础且强大的工具,掌握它的使用对于进行有效的数据输出至关重要。

 

3.define

在C语言中, #define  是预处理指令,用于定义宏。以下是  #define  的一些关键知识点:

①预处理指令:  #define  是预处理器的指令之一,它告诉预处理器在编译之前将宏名替换为宏定义的内容。

②宏定义: 使用  #define  可以定义宏,宏可以是简单的值,也可以是更复杂的表达式或代码片段。

③无类型: 与  const  不同, #define  定义的宏没有数据类型,它只是简单的文本替换。

④替换时机: 宏的替换发生在编译之前,预处理器会将代码中所有宏的引用替换为宏定义的内容。

⑤没有作用域: 与变量不同,宏没有块作用域,一旦定义,它将在定义它的文件及其包含的文件中有效,直到遇到  #undef  指令。

⑥多次包含问题: 由于宏没有作用域限制,如果一个头文件被多次包含,宏定义可能会被多次定义,导致编译错误。这通常通过使用条件编译来解决,例如:

#ifndef HEADER_FILE_H

#define HEADER_FILE_H

// 头文件内容

#endif

⑦宏与常量: 尽管宏可以用于定义常量,但推荐使用  const  或  enum  来定义常量,因为它们有类型且作用域受控。

⑧宏运算符:  #define  可以与字符串化运算符  #  和标记粘贴运算符  ##  一起使用,以创建复杂的宏。

字符串化运算符  #  将宏参数转换为字符串。

标记粘贴运算符  ##  用于连接两个令牌。

⑨宏的参数: 宏可以接受参数,类似于函数,但它们在预处理阶段展开,而不是在运行时计算。

⑩宏的副作用: 由于宏的展开是简单的文本替换,可能会引入一些副作用,比如改变代码的语义或导致意外的编译错误。

⑪调试困难: 使用宏可能会使调试变得困难,因为宏的展开结果可能难以阅读,且在调试时看不到宏的值。

⑫宏与内联函数: 在C99标准中,可以使用  inline  关键字定义内联函数,这通常比宏更好,因为内联函数有类型检查,且编译器可以优化它们的调用。

⑬预定义的宏: 编译器会预定义一些宏,如  __LINE__ (当前行号)和  __FILE__ (当前文件名)。

⑭ #define  与  #undef : 使用  #undef  可以取消宏的定义,这在需要取消预定义宏或防止头文件多次包含时很有用。

使用  #define  时,应该谨慎以避免上述问题,并在可能的情况下考虑使用  const  或  enum  来定义常量。

 

http://www.lryc.cn/news/468562.html

相关文章:

  • 社交媒体与客户服务:新时代的沟通桥梁
  • 设置虚拟机与windows间的共享文件夹
  • 微信小程序性能优化 ==== 合理使用 setData 纯数据字段
  • 【加密系统】华企盾DSC服务台提示:请升级服务器,否则可能导致客户端退回到旧服务器的版本
  • 直连南非,服务全球,司库直联再进一步
  • 【spring】从spring是如何避免并发下获取不完整的bean引发的思考 什么是双重检查锁 什么是java内存模型
  • 【计算机网络一】网络学习前置知识
  • nuScenes数据集使用的相机的外参和内参
  • 数据结构与算法:贪心算法与应用场景
  • 音频编解码器音频文件格式
  • FreeSWITCH JSON API
  • 学习docker第三弹------Docker镜像以及推送拉取镜像到阿里云公有仓库和私有仓库
  • 一文掌握Kubernates核心组件,构建智能容器管理集群
  • 正则表达式快速入门
  • 【小程序】-基础语法(二)
  • js 填充数组
  • AI创作3款软件分享,助力内容创作者高效产出优质作品
  • A survey of loss functions for semantic segmentation——论文笔记
  • docker部署es与kibana Mac
  • redis的渐进式哈希?说一下细节?------面试题分享
  • javaWeb项目-springboot+vue-车辆管理系统功能介绍
  • redis和memcached的区别
  • 构建安全基石:网络安全等级保护定级指南
  • PyQt 入门教程(3)基础知识 | 3.1、使用QtDesigner创建.ui文件
  • 解锁金融大门,你的基从备考秘籍全揭秘!
  • 详解Linux系统中的设备驱动程序.ko文件
  • MG协议转换器:高效连接,智控未来
  • pycharm设置自动格式化代码
  • AI应用程序低代码构建平台Langflow
  • QT-使用QSS美化UI界面