【C语言笔记】

本文详细介绍了C语言中的指针、动态内存分配(malloc,realloc,free)以及内存分布区域,包括栈、堆、全局变量区和文字常量区。此外,还涵盖了结构体内存计算、文件操作、qsort快速排序的使用以及指针数组和函数指针的概念。
摘要由CSDN通过智能技术生成

C语言笔记


一、优先级

1、优先级图表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、运算方向

以下是自右向左运算

  1. 三目运算符
  2. 单目运算符
  3. 赋值运算符

二、指针字节大小

如果在32位平台,指针大小为4个字节
如果在84位平台,指针大小为8个字节


三、动态内存函数

注意如果没有释放内存,也就是没写free函数释放内存,没次运行就会占用没malloc或realloc申请的空间,将不会还给操作系统的堆区,该区间见无法访问。

1、malloc

2、realloc

3、free

链接:动态内存函数的用法


四、内存分布区域

内存分为五大区:代码区、栈区、全局变量区、堆区、字符常量区。

1.代码区:存放函数体的二进制代码,由操作系统进行管理的。
2.栈区:由编译器自动分配释放,存放函数的参数值,局部变量等。
3.全局静态区:存放全局变量和静态变量
4.堆区:由程序员分配和释放,若程序员不释放,程序结束后由操作系统回收。
5.文字常量区:为常量,无法修改,当程序结束才释放。

文字常量区
eg:

char *p = "abcdefg";//*p是无法修改的,相当与下面的
char const *p = "abcdefg";//以免发生报错,又无法知道错误错在哪,最好写这种样式

像这种"abcdefg"就是放在文字常量区,应为它并没有赋值给变量,而是用指针去指向它的地址。


五、结构体的内存大小计算

不同编译器的对齐系数不同,vs一般默认为8。
每个成员的地址相当于结构体变量第一个字节地址的偏移量,必须整除成员的对齐值(8)
1、 若成员大小 < 对齐数(8) 对齐值为成员大小
2、 若成员大小 >= 对齐数(8) 对齐值为对齐数(8)
整个结构体变量大小为最大值对齐数的整数倍


六、文件操作

文件指针


七、qsort快排用法

qsort详细讲解


八、指针的用法

整形指针、字符指针、数组指针、函数指针、结构体指针

1、指针数组和数组指针的区别

(1)数组指针

  1. 数组指针是是指向数组的指针,其本质是指针
  2. 一般用于二维数组存放指针,也可以放一维数组
  3. 原型为 *void (p)[size_t]

(2)指针数组

  1. 指针数组是一个存放指针的数组
  2. 原型为 *void * 数组名[size_t], void arr[size_t]
  3. 理解为指针放在数组中,其本质还是数组

2、函数指针

函数指针

  1. 原型:类型 (*p)(参数类型)

函数指针数组

总结

1、scanf("%*d%d", &a);

%*d ——是忽略这个输入值

eg:提取身份证的出生日期

scanf("%*6d%4d%2d%2d%*4d", &a, &b, &c);

2、编程小技巧

编程小技巧


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

甘-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值