
C语言进阶
文章平均质量分 91
白杨Cc
这山望着那山高。
展开
-
【C语言进阶】关于柔性数组的学习
1.柔性数组的概念:也许你从没有听说过柔性数组(flexible array)的概念,但是它确实存在的;在C99中,结构体的最后一个元素允许是未知大小的数组,这就叫【柔性数组】成员;例如:struct S{ int n; int arr[]; //柔性数组成员}2.柔性数组的特点结构体中的柔性数组成员前面必须至少有一位成员变量;sizeof()函数计算结构体大小时,是不包括柔性数组的成员所占内存大小的;包含柔性数组成员的结构最好用malloc()函数进行动态分配内存,并且分配原创 2022-07-21 22:33:06 · 318 阅读 · 1 评论 -
【C语言进阶】⑨动态内存分配知识总结 超详细
1.为什么存在动态内存分配?通常:int a = 20; //在栈空间是哪个开辟四个字节char arr[10] = {0}; //在栈空间上开辟10个字节的连续空间;但是,上述开辟的内存的方式有两个缺点:空间开辟的大小是固定的;数组在声明的时候,必须指定数组的长度,和它所需要的内存,以至于在编译时系统分配空间;然而,对于空间的需求,不仅仅是上述的情况;有时候我们需要的空间大小在程序运行的时候才能知道,那数组在定义是给定的固定大小的空间就不能满足需求了,这时候我们就哟尝试动态内存开辟!原创 2022-07-12 22:55:08 · 523 阅读 · 5 评论 -
【C进阶】⑧自定义类型:结构体、枚举、联合体 超详细的总结
一、结构体1. 什么是结构体?结构体是一些值的集合,这些值被称为成员变量;结构体中的每个成员变量可以是不同类型的变量;例如:数组是一组相同类型的元素的集合;故:结构体也是一些值的集合,结构体的每个成员可以是不同类型;2. 结构的声明struct tag{ member -list }variable -list;例如:生活中,对象是复杂的;对于一本书而言:一本书含有:书名+作者+出版社+定价+书号等等;一个学生:学号+姓名+电话+性别等等;这些,书和学生就是一种结构原创 2022-05-25 12:22:13 · 1108 阅读 · 45 评论 -
【C语言进阶】经典笔试题详解之指针篇
一、二维数组代码块①:int a[3][4] = { 0 }; printf("① %d\n", sizeof(a)); printf("② %d\n", sizeof(a[0][0])); printf("③ %d\n", sizeof(a[0])); printf("④ %d\n", sizeof(a[0] + 1)); printf("⑤ %d\n", sizeof(*(a[0] + 1))); printf("⑥ %d\n", sizeof(a + 1)); printf("⑦ %原创 2022-05-12 14:42:35 · 646 阅读 · 40 评论 -
【C语言进阶】经典笔试题数组篇之一维数组详解
一、知识回顾sizeof(数组名) -数组名表示整个数组的大小,计算整个数组的大小;&数组名:表示整个数组;除此之外,所有的数组名都是数组首元素的地址;sizeof(),求字符串长度时,字符串后自带有\0,也会被记录在内;strlen(),求字符串长度,遇到\0后结束;二、题目2.0 一维数组代码块①:int main() { int a[] = { 1,2,3,4 }; printf("① %d\n", sizeof(a)); printf("② %d\原创 2022-04-26 17:21:21 · 3316 阅读 · 56 评论 -
【C语言进阶】⑦字符串函数详解
一、字符串函数1.求字符串长度 - strlen():函数介绍:字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ );传递的实参所指向的字符串必须要以 ‘\0’ 结束,否则得到的是一个错误值;函数strlen()的返回值为size_t,是无符号的整数;2.自己模拟实现strlen()函数的功能2.1计数器版本int my_strlen(const char*str){ int count = 0; asser原创 2022-05-16 07:51:51 · 2011 阅读 · 46 评论 -
【C语言进阶】⑥函数指针详解
一、函数指针1.概念函数指针:首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址;请看示例:int main(){int a = 10;int*pa = &a;char ch = 'c';char* pc = &ch;int arr[10] = {0};int (*parr)[10] = &arr;//取出数组的地址return 0;}解析:parr是一个指向数组的指针,存放的是数组的地址;所以:数组指针 —存放数组地址的指针原创 2022-04-21 13:17:36 · 61731 阅读 · 78 评论 -
【C语言进阶】⑤关于数组传参和指针传参辨析
文章目录一、数组1.1.一维数组1.2.二维数组1.3.指针和数组二、一维数组传参三、二维数组传参四、总结一、数组1.1.一维数组int arr1[]={1,2,3,4,5,6,7,8};数组名 arr1 一般表示的是首元素的地址,以下两种情况除外:(1)&arr1表示整个数组元素的地址;(2)sizeof(arr),其中arr表示的是整个数组,sizeof(arr)计算的是整个数组的大小,单位是字节;arr和&arr的辨析,请下面图解:1.2.二维数组int原创 2022-04-19 16:51:47 · 2021 阅读 · 27 评论 -
【C语言进阶】④指针归纳总结,这些指针你都认识吗?
文章目录一、指针的概念二、野指针1. 概念:2. 为什么会出现野指针?3. 如何避免野指针的出现?三、指针类型总结3.1字符指针3.2指针数组3.3数组指针3.4指针函数3.5函数指针3.6.看一段代码,想一想打印的结果是什么?3.7.输出的是两个地址,这两个地址是 test 函数的地址 为什么呢?3.8指针函数和函数指针总结四、感谢与预告一、指针的概念指针就是一个变量,只不过这个变量比较特别,是用来存放地址的,而地址是计算机内部唯一标识的一块内存空间,即:地址是存储空间的编号!;其实忽略这个变量原创 2022-04-16 22:07:23 · 838 阅读 · 33 评论 -
【C语言进阶】③探究浮点数在内存中的存储方式
文章目录一、例子二、浮点数在内存中存储方式2.1国际标准IEEE(电气和电子工程协会)754规定:三、解答3.1刚开始的例子答案一、例子想想看,输出的结果是什么?int main(){ int n = 9; float *pFloat = (float *)&n; printf("n的值为:%d\n",n); printf("*pFloat的值为:%f\n",*pFloat); *pFloat = 9.0; printf("num的值为:%d\n",n); printf("原创 2022-04-11 23:25:59 · 1128 阅读 · 10 评论 -
【C语言进阶】②数据在内存中存储之经典例题详解
第一题:百度2015年系统工程师笔试题:请简述大端字节序和小段字节序的概念,并设计一个小程序来判断当前机器的字节序。(10分)解析:上一篇文章已经讲述了大端字节序和小端字节序的概念,这里就不在累述。我们来分析一下编程实现:(1) 首先,对于机器的存储方式一般就两种:大端和小端;大端字节序是数据的高位存储在内存的低位,小端字节序是数据的低位存储在内存的低位。那么,对于一个变量来说,我们是不是只要判断出内存中的低位是数据的高位还是低位,那么我们就可以知道机器的存储方式。(2)实现:原创 2022-04-10 22:45:29 · 1619 阅读 · 6 评论 -
【C语言进阶】①探究数据在内存中的储存
一、知识回顾1.数据类型char -字符型 //在内存中占一个字节short -短整型 //在内存中占两个字节int -整型 //在内存中占四个字节long -长整型 //在内存中占四个字节float -单精度浮点型 //在内存中占 四个字节double -双精度浮点型原创 2022-04-06 22:14:34 · 928 阅读 · 3 评论