【C语言】(个人)总结100条C语言小知识,千字长文,收藏必备

开门见山的说:

先说好啊

要是有三个不知道就点个赞吧

五个不知道就收藏吧

二十个不知道就点关注吧

qaq球球了

1

仅仅有操作符的优先级和结合性,是无法确定一个复杂表达式的值的。


2

sizeof返回的是sizeof_t无符号整形


3

当int和一个无符号int比较时会发生算数转化,负数会被转换为无符号整形


4

改变变量的类型,并不会改变变量的值


5

判断一个数是不是2的m次幂,仅需n=n&(n-1),是不是为0既可以


6

全局指针/变量,不初始化就默认为0(vs2019环境下)


7

结构体.符号优先级很高


8

release版本不能调试


9

计算2的n次方,2<<n就可以


10

scanf的返回值与读取的值有关。


11

形参的部分数据大小可以省略


12

数组在传参的时候是传的首元素地址/数组名

并不需要创建数组


13

exturn 在一个文件中引用另一个文件中定义的变量或者函数

exturn int add(int a, int b)


exturn int c;

14

函数也有指针,形式为

返回类型(*函数名)(形参)

void (*fun) (int x);


15

typedef可以重新定义类型


16

回调函数,在函数内部通过函数指针调用的函数。


17

冒泡排序只能排序单一数据类型,不具有通用性,还得看qsort函数


18

逗号表达式,是从左向右取最右的值


19

函数传形参时候也是,从左向右取最右的值


20

strlen函数返回值为无符号整数


21

C语言定义了一些宏

如INT_MAX int型的最大值


22

malloc向内存申请空间

ralloc调整向内存申请的空间

ralloc内存申请的空间的值全部初始化为0


23

perror直接打印错误码

strerror获取错误码


24

memcpy数据拷贝

memmove可以自己数据拷贝自己


25

结构体第一个成员永远在0偏移处


26

offsetof-宏,计算结构体相对起始位置的偏移量。


27

结构体为什么有内存对齐
1平台原因。
2性能原因。
总体-空间换时间。


28

结构体传参传的是地址也就是

形参是结构体指针变量。


29

位段开辟空间按头型整型开辟。
位段在不同的编译器,开辟内存空间是不同的。


30

函数在传参的时候要耗费时间和空间  ,工程中就需要注意这个问题


31

枚举变量按序初值累加,可以赋初值,也可以中间改变值。


32

#difine的定义,本质上是代码的替换。


34

联合体成员共用一个内存,内存空间至少是成员最大成员大小。


35

联合体可以判断大小端。


int arr()
{
	union
	{
		int i;
		char c;
	}un;
	un.i = 1;
	return un.c;
}
#include<stdio.h>
int main()
{
	int  x =arr();
	if (x== 1)
	{
		printf("小端");
 
	}
	else
	{
		printf("大端");
 
	}
	return 0;
}

36

打印字符串只需起始地址就行。


37

void函数可以写return。不写数值就行。


38

未来一个数据要初始化时,不能简单的大括号0,最好使用函数封装。


39

memset,仅仅去赋初值的初值的后八位二进制位。无论多大,仅仅有后八位是有效的。


40

类型

long>=int


41

free完后,指针指向空指针
不能让指针变为野指针


42

malloc开辟字节不能开辟0,标准未定义


43

malloc返回值为viod*


44

当我们不释放动态申请的内存时,结束时操作系统自动回收


45

如果程序不结束,动态内存是不会自动回收的,行成内存泄露的问题


46

realloc重新分配空间。
扩容失败也会返回空指针。
一般扩容使用临时指针


47

不能对空指针的解应用。


不能对内存的越界访问。


不能释放非动态开辟的内存。


不能使用free释放动态开辟内存的一部分。


不能让内存空间的多次释放


必须记住内存的起始地址。


48

形参和实参两块独立的空间。


49

柔性数组
未指定大小的数组
结构体中,柔性数组前必须要有其他类型的成员。
一定是最后一个才是柔性数组


50

柔性数组和指针在细节上有差异
柔性数组,访问速度快,容易释放free


51

文件具有持久化的特点。


52

文件有程序文件和数据文件。


53

路径有绝对路径和相对路径


54

w如果文件已经存在,那么他会销毁并重新创建


55

fopen 打开文件  返回FILE类型的指针

fclose 关闭文件  返回FILE类型的指针

记得把文件指针放为空指针NULL


56
C语言借助操作系统调用文件

系统调用api


57

C语言操作文件时会创建file类型的变量


58

流:沟通外部设备的方法

文件流 :沟通文件

显示流:沟通显示器


59

文件使用时,会打开文件流


60
c程序运行起来,默认打开


标准输入流  stdin
标准输出流   stdout
标准错误流   stderr


61

fgets从文件中获取字符。
fputs字符输入到文件中去


62

sscanf  sprintf
将格式化数据转换为字符串。


63

fread 中第三个参数是最多读几个


64

ferror判断是不是遇到错误而结束

我们可以确定在上一个操作期间该文件中存在一些错误


65

feof判断是否遇到文件末尾结束


66

内存缓存区
flush刷新缓存区,会直接把缓冲区数据写到硬盘中去


67

fclose也会把缓冲区数据写入硬盘,防止文件丢失。


68

C语言在编译中有两个环境。
翻译环境,执行环境


69

写宏的时候不要吝啬括号。


71

define替换规则


72

getc确实获得了一个字符,但缓冲区也少了一个字符


73
宏存在副作用。


74

offsetof是一个宏。


75

存在命令行定义,用来管理代码的


76

函数调用时候的开销
函数有类型限制,不够自由


78

宏无法调试
类型无关,不严谨。
运算优先级问题,可能导致出错


79

strtok创建了全局变量,记录了字符串指针的位置


80

编译错误,会出错误码全局变量errno


81

malloc开辟失败返回空指针。 


82

islower判断是不是小写,是就返回非零


83

toupper字符串转大写

tolower字符串转小写


84

assert检查指针是否为空。


85

链接阶段可以发现函数名未定义


86

abs函数求绝对值。


87

//百度搜索中空格会被转换为%20。


89
define定义的类型有巨大缺陷
一般用typedef


90

全局变量不要定义在头文件中。


91

头文件一般放声明,类型声明,函数声明


92

#ifndef __TEST_H__
#define __TEST_H__
//头文件的内容
#endif //__TEST_H__


或者

#pragma once

可以放在头文件在一个函数内被重复调用,占据不必要的空间。
 


93

92是防止在一个文件中被引用两次,并不能防止在其他文件中引用导致类型重定义。


94

*得与函数名结合才能形成函数指针。


95

二进制
&上留数位。0011&1010    0010  保留了有1的位数
|上换数位。0011|1010       0010 替换了有1的位数


96

预编译,编译,汇编,链接。
链接汇总全局的符合,不会汇总局部的符号。


97

函数调用形参从右向左传参,且不是在函数内部创建变量,是直接压栈,需要时直接调用,形参是实参的临时拷贝。


98

函数返回值时,会返回到寄存器里去。
寄存器不会随着函数的销毁而销毁。


99

main函数的空间在ebp和esp维护。
ebp,esp在维护函数调用时函数栈帧的空间。

esp栈顶指针
ebp栈低指针


100

函数调用时会,call会存一条地址,方便函数调用结束时ebp回来时找到地址。


哈,谢谢各位同志的阅读,然后呢如果觉得本文对您有所帮助的话,还给个免费的赞吧

Thanks♪(・ω・)ノ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值