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

c语言编写经验逐步积累4

寥寥数笔,记录我的C语言盲点笔记,仅仅为以前经历过,亦有误,可交流。

 

1.逻辑表达式的使用
取值 = 表达式 ? 表达式1:表达式2;
比方x = y > z ? y:z

2."+,-"等逻辑运算符优先级大于移位,移位大于逻辑运算

3.
sizeof在编译时由编译器完毕,对其传入的參数不做运算处理。
sizeof(i++);返回4;不会对实际的i进行操作
sizeof和strlen的差别是,后者是运算时运行。
返回遇到非NULL时的字符个数。
sizeof处理数组名时会统计分配的内存数,如a[12] = {};则sizeof(a) = 12;
如a [] = "aaa",则编译器是分配4内存空间存放数据,sizeof(a)= 4;

4.强制类型转换先于+,-,故指针类型变化后,自加操作会不同;

5.invalid combination of type specifiers
无效的类型进行组合。引起的原因主要是头文件多种数据类型define和typedef引起了错误。
typedef是一个类型的重定义 不是宏的值的重定义 仅仅能用于类型的替换
,主要在编译阶段,须要带有分号

define是宏定义,主要在预处理阶段,不太适合做类型转换,结尾分号会被带入宏替换
比方先定义
#define Uint8 unsigned char 
typedef xdc_Uint8 Uint8;这就进行了宏替换为:
typedef xdc_unsigned char Uint8;从而导致了类型结合无效的现象。故define宏是预处理的替换,而typedef是做到数据类型的真正转换与定义。
宏最好不要进行typedef的转换!!!。
数据类型在多处定义时,注意不要出现上述情况

6.printf输出%号,须要使用printf("%%\n");来输出

7.逻辑或与运算或要切记:
|和||,以及&和&&的使用。

8.取非!和~的运算优先级》 + -;

9 strcpy是将源地址開始到\0结束的字节数拷贝到目的地址。
strlen统计的从源地址到遇到\0前的字节数,不算如\0

10.某一位置1 A |= (1 << 5);
某一位置0 A &=  ~(1 << 5);
某一位取反 A ^= (1 << 5); 与1异或取反。

11. union进行赋值时须要使用a.b操作

12、0x%08x,输出16进制数要达到8位,不然在前面补0

14.栈帧包含还有一帧须要的函数參数,返回的pc地址以及当前帧的ebp.

15. 结构体对齐
struct test
{
char x1;
short x2;
float x3;
char x4;
};
因为编译器默认情况下会对这个struct作自然边界(有人说“自然对界”我认为边界更顺口)对齐,结 构的第一个成员x1,其偏移地址为0,占领了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界,因此,编译器在x2和x1之间填充 了一个空字节。结构的第三个成员x3和第四个成员x4恰好落在其自然边界地址上,在它们前面不须要额外的填充字节。在test结构中,成员x3要求4字节 对界,是该结构全部成员中要求的最大边界单元,因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了3个空字节。整个结构所占领空间为 12字节。

16. 
memset(),是将n个字节都设置为传入的一个字节如memset(a, 0, 100);
memcpy(dst, src, n);将src開始的n个字节copy到目的上去。

17.多进程引用的动态链接库中的全局变量问题 
因为不同进程间是独立的,有自己的text和data,而全局位于数据段,故不会存在竞争的现象。

18.struct的一种结构体数组申明与定义的方法。
static struct {   char *name;
    int offset;  } _reg_list[] = {};
 


a




 

相关文章:

  • Session 和 Cookie 机制
  • C语言中预处理器的相关知识:
  • java基础 - 冒泡排序,随机数算法
  • 大写中文数字-財务
  • 关于android:focusable属性
  • php基础教程(一):预备知识
  • javascript页面刷新的几种方法
  • SFB 项目经验-02-共存迁移-Lync 2013-TO-SFB 2015-规划02
  • PL/SQL常用语句
  • springMvc源码学习之:spirngMvc的拦截器使用
  • linux系统用户以及用户组管理
  • git 使用教程整理
  • cisco 1000v 使用3层模式 这次会一点了。。。
  • 如何在onCreate中获取View的高度和宽度
  • Orchard模块开发全接触6:自定义用户注册
  • classpath对获取配置文件的影响
  • Flannel解读
  • Median of Two Sorted Arrays
  • passportjs 源码分析
  • php面试题 汇集2
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • React-redux的原理以及使用
  • Solarized Scheme
  • 工作中总结前端开发流程--vue项目
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用Swoole加速Laravel(正式环境中)
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序实战练习(仿五洲到家微信版)
  • 想写好前端,先练好内功
  • 用 Swift 编写面向协议的视图
  • 用mpvue开发微信小程序
  • #define,static,const,三种常量的区别
  • #mysql 8.0 踩坑日记
  • (1)STL算法之遍历容器
  • (8)STL算法之替换
  • (Matlab)使用竞争神经网络实现数据聚类
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)elasticsearch 源码之启动流程分析
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)appium-desktop定位元素原理
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 通过 Ef Core 操作 Mysql
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 指南:抽象化实现的基类
  • .Net 中Partitioner static与dynamic的性能对比
  • .net6Api后台+uniapp导出Excel
  • .Net下的签名与混淆