
C语言
文章平均质量分 91
C语言博文
苏貝貝
勤奋耕耘,收获满满;不辍努力,未来可期。
展开
-
【C语言】数据在内存中的存储
前面我们已经学习了基本的内置类型:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数以及他们所占存储空间的大小1.使用这个类型可开辟不同内存空间的大小(大小决定了使用范围)。原创 2023-08-17 08:01:34 · 340 阅读 · 18 评论 -
【C语言】指针详解(2)
( )是函数指针类型,( )内是类型,意思是强制类型转换,因为( )内是函数指针类型,所以0应该是地址而非数字,且0地址处的内容是函数。(void ( * )( ) ) 0前有 * ,意思是调用0地址处的函数,(我们知道,字符数组是存放字符类型的数组,整型数组是存放整型的数组,那么指针数组就当然是存放指针类型的数组,也就是说数组里面的元素都是指针类型的。首先,用* 修饰p,表示p是个指针变量,再将* p放在( )中,在(*p)后面加( ),( )里面写函数的实参类型,最后在(*p)前写函数的返回类型。原创 2023-08-27 08:00:00 · 813 阅读 · 37 评论 -
【C语言】指针详解(3)
简化上面的代码,我们发现,Add,Sub,Mul,Div的参数类型和个数相同,返回类型也相同,所以可以使用函数指针数组,让Add,Sub,Mul,Div成为该数组的元素,用数组的元素调用Add,Sub,Mul,Div函数;所以它们的下标分别为0,1,2,3,但由于菜单上1,2,3,4才代表它们,所以我们不妨在Add前加NULL,这样它们的下标就为1,2,3,4了。上述代码也有缺陷,因为要写成数组元素的话,它们的类型必须要相同,如果有一个函数,它的返回类型不是int,那就不能采用这种方法。原创 2023-09-13 09:20:02 · 776 阅读 · 35 评论 -
【C语言】用冒泡排序实现my_qsort
用冒泡排序实现my_qsort?你或许觉得没有必要这样做,有现成的qsort函数,为什么还要自己写一个呢?于我而言,它可以让我对冒泡排序和qsort函数的印象加深。至于这到底有没有用,仁者见仁,智者见智吧。好了,就说这么多,现在让我们来回忆一下什么是冒泡排序和qsort函数。了解qsort函数。原创 2023-09-17 07:00:00 · 1450 阅读 · 0 评论 -
【C语言】实现通讯录管理系统
本文将使用C语言来实现通讯录管理系统,该通讯录包括若干联系人,和每个联系人的姓名、年龄、性别、电话、地址。此通讯录的功能包括:增加联系人信息,删除联系人信息,查找联系人信息,修改联系人信息,显示所有联系人信息,根据名字顺序给所有联系人信息排序通讯录的定义简简单单,不用多说我们来想想如何将它初始化。(如果不初始化,那么con里面的内容都是随机值)在test.c文件中调用初始化函数,在contact.h中声明初始化函数,在contact.c文件中定义函数。原创 2023-10-25 08:21:20 · 4314 阅读 · 72 评论 -
【C语言】自定义实现strcpy函数
此次优化将*dest++ = *src++放在while后面的()中,当src解引用的值为 ‘\0’ 时,将 ‘\0’ 赋值给 *dest,表达式的值为0,退出循环。是不是很容易想到这种方法,当对src解引用的值不为 ‘\0’ 时,*dest = *src,然后让指针变量dest和src都指向后一位字符,直到对src解引用的值为 ‘\0’ 时,再将dest = *src= ‘\0’ ,最后返回目的数组的首元素地址。:返回的是第一个目的数字的首地址,类型为char*那么很多人大概会选择下面的这种方法吧。原创 2023-08-17 08:01:13 · 2035 阅读 · 22 评论 -
【C语言】指针笔试题解析
进行第7条语句,cpp[-1][-1]== * (* (cpp-1)-1),cpp-1指向数组cp的第二个元素,对元素解引用找到数组cp的第二个元素,再-1指向数组c的第二个元素,对元素解引用找到数组c的第二个元素,要打印字符串,通过第二个元素找到字符串NEW,+1后找到字符串NEW的E,遇’\0’停止,所以结果为EW。&a表示取出整个数组a的地址,再+1表示跳过该数组,取出后面同类型的地址,即5个int型的地址即橙色区域,对&a+1进行强制类型转化后赋值给ptr,所以ptr指向的是数组后面的第一个地址。原创 2023-09-25 09:45:07 · 1664 阅读 · 65 评论 -
【C语言】优化通讯录管理系统2
本篇博客是基于上一篇博客写出来的,原创 2023-11-27 14:29:57 · 1250 阅读 · 57 评论 -
【C语言】预处理详解
_ FILE_ _ //进行编译的源文件的文件名_ _ LINE _ _ //文件当前的行号_ _ DATE _ _ //文件被编译的日期_ _ TIME _ _ //文件被编译的时间_ _ STDC _ _ //如果编译器遵循ANSI C,其值为1,否则未定义int main()//从下图中可以看出,在第9行//该语句所在的函数名//当前使用的VS2019不遵循ANSI Creturn 0;语法格式:#define name//常量名 stuff//内容。原创 2023-12-05 06:00:00 · 1895 阅读 · 68 评论 -
【C语言】优化通讯录管理系统
在上一篇博文实现通讯录管理系统的最后,我们了解了那段代码的问题:通讯录的大小是固定的100个元素,如果想要存放1000个人的信息,那么空间就不够了;如果信息太少,只想存10个人的信息,那么空间就大了。即使可以在源代码中修改#define定义的值解决,也不免有些麻烦。怎么解决?用动态内存管理!本篇博文要实现通讯录管理系统,假设初始时只能存储3个人的信息,若超过三人,则通讯录容量+2,再存储联系人信息。原创 2023-10-29 16:47:34 · 1163 阅读 · 91 评论 -
【C语言】字符函数和内存操作函数
dest原创 2023-10-09 21:38:45 · 3933 阅读 · 70 评论 -
【C语言】结构体+位段+枚举+联合(2)
位段的声明和结构是类似的,有两个不同:1.位段的成员必须是 int、unsigned int 或signed int。(在C99之后,也可以是其它类型,但是基本上都是int,char)2.位段的成员名后边有一个冒号和一个数字struct Aint _a : 2;//_a占用2个bit的空间int _b : 5;//_b占用5个bit的空间//……A就是一个位段类型。那位段A的大小是多少enum Day {以上定义的 enum Day , enum Gender 都是枚举类型。原创 2023-10-13 15:30:48 · 2912 阅读 · 82 评论 -
【C语言】文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2023-10-20 21:52:27 · 2950 阅读 · 87 评论 -
【C语言】字符函数和字符串函数(1)
注意:1.字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。2.参数指向的字符串必须要以 ‘\0’ 结束,否则函数返回值为随机值3.注意函数的返回值为size_t,是无符号的( 易错 )点击该链接继续了解strlen问:下面代码输出的结果是什么?答案:str2>str1这和你想的是否一样?原创 2023-10-06 01:23:11 · 1321 阅读 · 52 评论 -
【C语言】动态内存管理
C语言提供了一个动态内存开辟的函数:这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。○如果开辟成功,则返回一个指向开辟好空间的指针○如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。○返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。○如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器○使用malloc函数后,一定要记得判断malloc函数的返回值是否为NULL。原创 2023-11-03 07:21:14 · 3694 阅读 · 0 评论 -
【C语言】指针和数组笔试题解析
本篇文章是讲述在不同数组和指针的条件下,使用sizeof和strlen,让我们对数组和指针的理解更深。数组名一般表示首元素地址,除以下2种情况:1.sizeof(数组名),括号里面只有数组名,此时数组名表示整个数组,计算的是整个数组的大小2.&数组名,数组名表示整个数组,取出的是整个数组的地址指针变量的大小为4/8byte:1.在32位机器下,每个地址有32个比特位,即32/8=4个字节,所以指针变量的大小也为4个字节。原创 2023-09-20 08:53:30 · 923 阅读 · 0 评论 -
【C语言】初阶指针详解(1)
这里我们在讨论一下:指针的类型我们都知道,变量有不同的类型,整形,浮点型等。那指针有没有类型呢?准确的说:有的。当有这样的代码:(1) int* p;(1)* 代表p是指针变量,int* 是指针变量p的类型,int 是p所指向的类型,即p所指向的是int类型的变量(2)* 代表p是指针变量,char* 是指针变量p的类型,int 是p所指向的类型(3)离p最近的 * 代表p是指针变量,int* * 是指针变量p的类型,int* 是p所指向的类型。原创 2023-08-10 12:25:58 · 665 阅读 · 8 评论 -
重生之拯救C语言计划(操作符篇)
所以c=b=13下面程序中fun()函数有多少个实参呢?原创 2023-08-03 13:33:19 · 679 阅读 · 0 评论 -
【C】C语言王国之扫雷游戏
扫雷是个老幼皆宜的游戏它的玩法是 在一个9×9(初级)、16×16(中级)、16×30(高级)或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个),再由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。了解了它的玩法后,让我们想想如何用C语言实现它呢?(以9*9为例)原创 2023-08-01 18:40:04 · 390 阅读 · 8 评论 -
【C语言】求最小公倍数的3种方法
3 *5=15能被b整除,则3 *5是 3和5 的最小公倍数。描述:正整数A和正整数B的最大公倍数是指 能被A和B整除 的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。先判断a和b中较大的那个数并赋值给m,判断m是否能被a和b整除 ,若不能则m一直+1,直到m能被a和b整除。可以被b整除,则 i*a是最小公倍数,如果不能被整除,则i++,继续判断 i *a是否可以被b整除。原创 2023-08-08 12:42:58 · 1768 阅读 · 15 评论 -
【C语言】每日一题---1
因此编译器会自动将左侧i转换为无符号整形的数据,当-1 被解析为有符号数时,高位置为1,表示这个数是负数。当它被解析为无符号数时,高位的1 被当做2 的乘幂,所以仅这一位置,就有2^31,远远大于4,所以这道题的答案选A。原创 2023-08-12 20:57:09 · 458 阅读 · 21 评论 -
【C语言】保姆级三子棋教程
三子棋,民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。如果两个人都掌握了技巧,那么一般来说就是平棋。它最大的好处就是随便找个地方就可以玩这个简单而有趣的游戏了。已知三子棋的规则后,我们该如何用C语言实现呢?接着往下看看吧!原创 2023-07-30 19:01:41 · 207 阅读 · 14 评论 -
strlen和sizeof的区别
大家好,我是苏貝,本篇博客带大家了解C语言中的sizeof和strlen(仅此一篇让你明白它们两的差别)原创 2023-08-10 22:06:06 · 487 阅读 · 14 评论 -
【C语言】自定义实现strlen函数的3种方法
对指针str进行解应用*str= ‘\0’ ,所以函数返回0,接着返回上一次递归,此时str指向字符b,my_strlen(str + 1) 的结果为0,所以1+my_strlen(str + 1)的结果=1并再将1返回上一次递归。将数组作为函数实参,实际上传过去的是数组首元素地址,用指针接收变量str接收,对str进行解引用操作找到str指向的字符,若该字符为 ‘\0’ ,则返回0;= ‘\0’ ,所以函数返回1+my_strlen(str + 1),再进行下一次递归, 此时str指向下一位字符b。原创 2023-08-11 21:37:50 · 1570 阅读 · 25 评论 -
【C语言】结构体(1)
(1) 定义:可以在以下地方定义结构体变量(应该尽量少的使用全局变量)1.结构体类型{ }的后面,;(分号)的前面(全局变量)2.结构体类型的后面,main函数上面(全局变量)3.main函数里面(局部变量)struct B {int age;} a , b;//a,b是全局变量 struct A d;//d是全局变量 int main() {struct A f;//f是局部变量 return 0;(2)初始化1.按照顺序初始化。原创 2023-08-07 23:09:36 · 249 阅读 · 4 评论 -
【C语言】const修饰普通变量和指针
const 放在 * 左边限制的是指针指向的内容,也就是说:不能通过指针来修改指针指向的内容,但是指针变量是可以修改的,也就是指针可以指向其它变量。const 放在 * 左右两边限制的是指针变量本身和指针变量指向的内容,也就是说:不能通过指针来修改指针指向的内容,指针也不能指向其它变量。变量的值不能修改,否则会报错。原创 2023-08-14 23:45:15 · 815 阅读 · 30 评论