C:记点零碎的东西

感谢下面的参考文章中博主的辛苦撰写

1.零值包括哪些

参考:https://www.cnblogs.com/PikapBai/p/14415303.html

0,0.0,FALSE,NULL "空指针",空白符,空字符串等

float x 与零值比较时不能直接使用==或!=,float 类型的零值一般为 1e-6

const float E = 1e-6; 

if ((f >= E) && f <= E)

指针类型的零值为 NULL(空指针)

int *p_i = NULL;

if (p_i == NULL) 或者 if(p_i != NULL)

char 类型的零值为空白符:'','\t','\n','\v'(垂直制表符),'\f'(换页符),'\r'(回车符)

字符串 零值 表达:

        char str[9] = {0};

        char p_str = str;

        if (strlen(str) ) 或者 if(strlen(p_str) == 0)

2.指针的长度


参考:手把手入门C语言—指针的长度_c语言指针长度_林伟茂的博客-CSDN博客

int* iPoint;

char* cPoint;

print("iPoint 的长度 %d")

所有指针的长度是4个字节,能够传递任何类型的地址

还需要指出的是:指针位数和编译器位数相同

参考:指针变量占几个字节 为什么指针变量占4个字节-巨铭百科网

        指针就是地址,地址就是指针,而地址就是内存单元的编号,一个指针占几个字节,等于是一个地址的内存单元编号有多长。CPU通过地址总线在内存中找到数字3的地址,通过控制总线知道该操作是读还是写,然后通过数据总线,把数字3传输到CPU中。CPU地址总线的宽度决定了CPU的寻址能力,数据总线的宽度决定了CPU单次数据传输的传送量,也就是数据传输速度,控制总线决定了CPU对其他控件的控制能力以及控制方式。

        指针几个字节跟语言无关,而是跟系统的寻址能力有关。

        使用指针来读取数据,再重复操作的情况下,可以明显改善程序性能,例如遍历字符串。

        数据存储是以“字节”为单位,数据传输大多是以"比特为单位",每8位组成一个字节Byte,是最小一级别的信息单位。计算机能处理的最小单元是字节 而不是位。

        位:是由软件通过位运算符操作的

指针和指针变量的区别

        指针变量就是存放地址的变量,指针变量通常也叫作指针,其实含义不同。

3.基础编译时需要了解的一些知识

hello.c 预处理 hello.i 编译S hello.s 汇编 c hello.o 链接  hello

参考:centos编译c_centos编译c文件_云月绝的博客-CSDN博客

gcc:编程语言编译器,支持包括Java,c++,c,Fortran

toolchain:编译工具链是指GCC为核心的一整套工具,主要包含以下内容

        1.gcc-core:完成预处理和编译,把c代码转化为汇编代码

        2.Binutils:除gcc之外的一系列小工具,由gcc间接调用

        包括:

                链接器: ld ,将编译之后多个目标文件组织成最终的可执行程序

                汇编器:as,汇编代码转换成机器码

                目标格式查看器:readelf 查看目标文件或可执行程序文件的信息

                目标文件符号查看器:nm,查看目标文件中出现的符号(出现的哪些符号?)

                目标文件格式转换器:objcopy,如bin转.elf,.elf转换成bin

                              .elf文件 :参考:ELF文件格式的详解_.elf_pingxiaozhao的博客-CSDN博客

                              .bin文件:bin(二进制文件)_百度百科

                反汇编:objdump, 查看目标文件信息

                查看目标文件尺寸:size ,不同部分的尺寸和总尺寸,例如代码段大小,数据段大小,使用的静态内存,总大小等

        3.glibc:包含了主要的C语言标准函数库,如printf,mallo函数等

静态链接和动态链接:

        静态链接:在生成可执行文件的时候(链接阶段),把所有需要函数的二进制代码都包含到可执行文件中。如果静态库有更新,所有的可执行文件都得重新链接才能用上新的静态库。

        动态链接:在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库执行代码,最终达到运行时链接的目的。

由于运行时加载可能影响程序的前期执行性能。

4.c语言标准函数常用列举:

参考:C语言中常用的标准库函数有哪些?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千码君2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值