C语言
文章平均质量分 54
C语言知识与代码
ren9855
这个作者很懒,什么都没留下…
展开
-
C语言动态内存开辟
之前写的通讯录中,联系人的数量是给定的,如果添加数量少,就会浪费空间,如果添加数量过多,就会溢出,能不能自己定义要分配多大的空间,这样不会造成浪费和不好的影响,于是就有了动态内存开辟。malloc函数向内存申请一块连续可用的空间,并返回指向这块空间的指针.如果开辟成功,则返回一个指向开辟好空间的指针.返回的指针类型是void*.与函数 malloc 的区别在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0,而malloc里面存放的是随机值.这样函数返回的是一个新的内存地址。原创 2022-09-25 12:05:30 · 108 阅读 · 0 评论 -
C语言数据的存储(1)
C语言中,有多种数据类型,我们再来回顾一下。char类型也是属于整形类型,因为字符常量存储在计算机内存中时,并不是存储字符(如a,b,#等)本身,而是采用ASCII代码存储的,例如字符’a’的ASCII代码时97,因此,在存储单元中存放的是97(以二进制形式存放),而不是字符’a’。数据类型的意义: 1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。 2. 能够更好的看待内存空间的视角。 我们知道创建变量需要在电脑存储器中开辟空间,下面将介绍整形变量如何开辟空间并进行存储。 首先我们先要原创 2022-07-07 22:16:34 · 168 阅读 · 0 评论 -
C语言数据存储(2)
2.练习题原创 2022-07-10 11:31:59 · 154 阅读 · 0 评论 -
C语言汉诺塔
1.有三根相邻的柱子,标号为A,B,C。2.A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘。3.现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。如果只有一个盘子,可以直接把盘子从A柱移动到C柱,如下图所示如果有多个盘子,最下面的盘子看做一个整体,剩余的盘子看做一个整体,要先把上面的盘子移动到B柱,剩下的盘子自然就移动到C柱。比如下图所示。这样的话,再想办法把B柱的盘子移动到C柱即可。此时,问题就变成如下图所示。把盘子借助A柱移动到C柱同理,将A原创 2022-07-06 16:04:00 · 411 阅读 · 0 评论 -
C语言数据存储(3)
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位.** 对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M,如下图所示: 对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M,如下图所示: 对于有效数字M和指数E,还有原创 2022-07-10 11:21:10 · 149 阅读 · 0 评论 -
【C语言】字符串函数及其实现
strtok模拟实现。原创 2022-07-19 21:57:04 · 909 阅读 · 0 评论 -
数组越界死循环
记录C语言数组越界访问产生的死循环原创 2022-07-06 22:47:09 · 149 阅读 · 0 评论 -
初识C语言-指针初级(1)
指针是C语言重要的一部分,学好指针是非常重要的,通过本篇博客先对指针有大致的认识,以便为后续的指针进阶打下基础。首先,指针是什么?1.指针是内存中一个最小单元的编号,也就是地址2.指针,简单来说就是我们创建一个变量,内存会为变量分配内存空间,而指针就是用来存放内存地址的变量。指针通常指的是指针变量。如上图代码块所示,我们可以得出:指针变量,用来存放地址的变量。1.指针的大小根据机器位数而发生变化,在32位的机器上,地址是32个0或者1组成二进制序列,那地址就得用4个字节的空间来存储,所以一个指针变量的原创 2022-07-02 14:38:34 · 237 阅读 · 0 评论 -
C语言左旋字符串
写一个函数,判断字符串是否是另一个字符串旋转后的字符串。ABCDE左旋1个字符得到BCDEA。ABCDE左旋2个字符得到CDEAB。实现一个函数,可以左旋字符串中的K个字符。1.先把A字符放到一个临时变量里面。2.字符串n-1个剩余字符向前推进。1.假设需要左旋2个字符。3.把A放到字符串末尾。...原创 2022-07-17 10:46:53 · 379 阅读 · 1 评论 -
C语言扫雷
C语言扫雷。原创 2022-07-29 22:36:42 · 98 阅读 · 0 评论 -
初识C语言-操作符(2)
此操作符有:= += -= *= /= %= = &= |= ^=前面的’='号叫做赋值符,后面的符号叫做复合赋值符。2.单目操作符2.1.++和–3.逻辑操作符&& 逻辑与 要注意逻辑与和按位与区分逻辑或和按位或|| 逻辑或1&2----->01&&2---->11|2----->31||2---->14.条件操作符exp1 ? exp2 : exp35.逗号表达式逗号表达式,就是用逗号隔开的多.......原创 2022-06-29 22:01:01 · 331 阅读 · 0 评论 -
C语言指针(sizeof,strlen)练习(1)
sizeof(数组名)----表示计算整个数组的大小。&数组名数组名表示整个数组,取出的是整个数组的地址。除此之外,所有数组名都是数组首元素的地址。原创 2022-07-15 16:24:30 · 132 阅读 · 0 评论 -
C语言三子棋实现
今天我们来完成一个小案例,编写三子棋游戏。本文将会讲解三子棋的实现过程。原创 2022-07-28 23:44:02 · 648 阅读 · 0 评论 -
C语言指针(2)
因为加了括号,星号*先和p结合,说明p是一个指针变量,[10]表示p指向的是一个数组,数组里面有10个元素,前面的int表示数组类型是int.我们已经学习了数组指针,整形指针,字符指针等一系列的指针,函数指针顾名思义就是存放函数的指针,在了解函数指针之前,我们先来看看下面的代码。pfun1先和*结合,说明pfun1是指针,指针指向的是一个函数,指向的函数无参数,返回值类型为void。根据上面的代码我们发现,其实&arr和arr,虽然值是一样的,但是意义是不一样的。能够指向整形数据的指针。..........原创 2022-07-15 10:31:30 · 318 阅读 · 0 评论 -
C语言杨氏矩阵
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的请编写程序在这样的矩阵中套找某个数字是否存在。如果没有时间复杂度的限制,可以遍历整个数组,然后就可以判断是否存在想要的数字,但是这不符合题目的要求。要求时间复杂度小于O(N);......原创 2022-07-17 16:27:37 · 417 阅读 · 0 评论 -
【C语言】内存函数
void * memcpy ( void * destination, const void * source, size_t num );1.从source的位置开始向后复制num个字节的数据到destination的内存位置2.num是字节数原创 2022-07-22 10:21:28 · 409 阅读 · 0 评论 -
C语言预处理
C语言内置的预定义符号__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现case //在写case语句的时候自动把 break写上。在使用define的时候,不建议在后面加上;...原创 2022-08-13 11:43:31 · 127 阅读 · 0 评论 -
const修饰指针
本文中的const是指在修饰指针的情况下使用 const修饰变量时,该变量是一个常变量,不能够被修改,但本质上还是一个变量。下面是一个例子,能够方便理解const修饰指针 如上图p已经指向了m,说明女孩和男孩1是男女朋友关系,女孩对男孩说想去吃东西,男孩1有10块钱,女孩使用男孩1的钱包,这时钱就会花出去,*p=0。 但是男孩1不想花钱,会在 int*p加上const,变为 const int * p,女孩就不能够使用 *p买东西,但是她可以改变指向,女孩就跟男孩2好上了,p=&n. 如果男原创 2022-07-05 14:38:58 · 308 阅读 · 0 评论 -
C语言编程题求素数
素数又叫质数,素数是指在大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。思路:比如求100-200之间的素数,遍历每一个数,看它是否能够被2到(n-1)之间的数字整除,如果能够被整除,那么就不是素数,反之同理。代码优化: 之前是使用2到j-1之间的数字都试除一遍,现在换一个方法。如果一个数可以拆成两个数相乘的形式,其中一个因子一定小于等于开平方的原数。16=2 * 8=4 * 4 16开平方等于4,大于2同时也等于4,这样我们就可以进行优化。改成对数字开平方,如果从2到j-1都没有原创 2022-07-06 14:02:21 · 6171 阅读 · 0 评论 -
C语言结构体
1.1结构体的概念 我们知道数组它是相同类型元素的集合,而对于结构来说,结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。1.2结构的声明使用类型创建出对象,类似于int a=10; int是类型,a是int类型的对象,结构体struct stu S也是同理,struct stu是类型 ,S是对象。1.3结构体成员变量的类型 结构的成员可以是标量、数组、指针,甚至是其他结构体。如下图所示,在一个结构体中嵌套另一个结构体。1.4 结构体变量的定义和初始化 有了成员原创 2022-07-03 15:21:37 · 532 阅读 · 0 评论 -
初识C语言-操作符(1)
本文将介绍各类操作符以及使用,通过多篇文章来详解各类操作符(1)算术操作符(2)移位操作符(3)位操作符(4)赋值操作符(5)单目操作符(6)关系操作符(7)逻辑操作符(8)条件操作符(9)逗号表达式(10)下标引用、函数调用和结构成员移位的规则:左边抛弃、右边补03.1 左移操作符3.2右移操作符右移的规则:1.逻辑移位左边用0填充,右边丢弃2. 算术移位左边用原来值的符号位填充,右边丢弃注意:对于移位运算符,不要移动负数位,这个是标准未定义的。一道面试题:不能创建临时变原创 2022-06-27 17:56:03 · 199 阅读 · 0 评论 -
初识C语言-数组(2)
1.1 二维数组的创建1.2二维数组的初始化1.3二维数组的使用1.4二维数组在内存中的存储上图二维数组可以将arr[0],arr[1],arr[2]看做数组名1.5数组越界数组的下规定是从0开始的,如果数组有n个元素,最后一个元素的下标就是n-1。数组的下标如果小于0,或者大于n-1,就是数组越界访问了,超出了数组合法空间的访问。1.6数组作为函数参数1.数组名为首元素地址1.7数组名介绍首元素地址和数组地址是一样的,不同在于:&arr+1将会跳过一整个数组,arr表示首元素地址,+1跳原创 2022-06-25 21:09:55 · 124 阅读 · 0 评论 -
初识C语言-数组(1)
1.1数组:一组相同类型元素的集合数组的创建方式:type_t是数组的类型,比如整形int,字符型chararr_name为数组名,比如arr[const_n]是一个常量表达式,用于指定数组的大小1.2 数组创建数组创建就是在创建数组的同时给数组的内容一些合理初始值int arr[10];int arr1[5]={1,2,3,4,5}; //完全初始化int arr2[5]={1,2,3};//不完全初始化int arr3[]={1,2,3,4,5}; 等价于 int arr3[5]=原创 2022-06-25 20:15:08 · 159 阅读 · 0 评论 -
第一篇博客
小白写的第一篇博客原创 2022-06-01 10:59:43 · 74 阅读 · 0 评论 -
初识C语言-函数(1)
1.库函数和自定义函数库函数: 为了支持可移植性和提高程序的效率,所以C语言的基础库中提供了一系列类似的库函数,方便程序员进行软件开发,避免重复性的造轮子。2 .自定义函数函数包括函数名,函数体,返回值类型,函数参数。自定义函数就是有自己来设计所需要的功能。类似于求两个数的最大值,交换两个数的值等等。 在交换a和b两个值得时候,需要使用到传址调用。如果使用传值调用,在函数内部开辟了两块内存空间,来存放x,y,函数生命周期结束后,并没有交换两个数字的值3.函数的参数函数参数分为实际参数和形式参数原创 2022-06-22 11:09:33 · 189 阅读 · 0 评论 -
初识C语言-字符串
在C语言中,由双引号引起来的一串字符称为字符串字面值,或者简称字符串。例如:“hello”,“world”.在使用strlen()读取长度时,“\0”作为字符串结束的标志,是不会记录到字符串长度里的。原创 2022-06-05 16:38:10 · 1033 阅读 · 0 评论 -
初识C语言-常量
常量就是不会改变的量就叫做常量1.字面常量:如3.14,245,q,a,“abc”,'v’类似于这种,它的值不能被改变,这被称作字面常量2.const修饰的常变量:3.define修饰的常量:4.枚举常量:原创 2022-06-04 22:27:23 · 177 阅读 · 0 评论