- 博客(95)
- 收藏
- 关注
原创 .动态内存经典题分析(1)
而在这里,指针变量str传递的只是数值,并不是地址,若要改变str的值,则只能传递str的地址,因为不是传递地址的形式进行传参,这个参数会自己单独开辟一个空间进行调用函数内部的代码运行。因为字符串在打印的过程中,其实是将字符串的收个字符的地址传递给了printf进行打印,所以当str是一个指针,且这个指针的值是一个字符串,那么这个指针实际指向的是字符串的首字符。在普通变量的传参中,若使用指针则是将变量的地址传递给指针后,这个变量的内容会因为地址的传递,而在调用函数中的改变而发生改变。
2023-09-20 21:30:38
44
原创 realloc
realloc函数的出现让动态内存管理更加灵活。有时会我们发现过去申请的空间太⼩了,有时候我们⼜会觉得申请的空间过⼤了,那为了合理的时 候内存,我们⼀定会对内存的⼤⼩做灵活的调整。那realloc 函数就可以做到对动态开辟内存大小的调整。
2023-09-20 17:44:45
35
1
原创 malloc与free
而就算是变长数组也只是说数组的大小可以使用变量来指定,而一旦数组创建好后,依然是不能调整大小malloc是用来申请内存的free是用来释放内存的。
2023-09-19 21:32:48
1342
1
原创 如何使用记事本制作一个简陋的小网页(1)
html本质上是一种标签并不是一种语言,其最主要的功能就是对页面设置和页面的文本样式进行修改和修缮。
2023-09-16 16:27:59
288
1
原创 atoi函数
头文件: 使用atoi 我们得到的结果是 -12、12、-12、-12通过结果我们可以得知以下注意点:如果字符串从开头就有连续的空格字符,则跳过这些连续的空格字符,找到不是空格的字符。如果连续中断。
2023-09-16 14:40:39
69
原创 char的范围是一个循环的圆
2、char类型实际上分为signed char 和 unsigned char ,再一些编译器中(例如VS)signed char 其实等价于char ,下文的char 我们将默认为signed char。根据说明,我们得知char的范围是0~255,从结果进行判断,我们可以得知再char中 255+1=0。3、char 的范围是 0~255 unsigned char 的范围是 -128~127。所以,我们可以得出结论,char的范围是一个循环的圆。以上代码再VS编译器中进行运行,得到的结果是0。
2023-09-16 14:14:20
50
原创 数据在内存中的存储(2)
那么使用科学计数法则是 1.011*2^2 和十进制一样,将小数点往前移动两位,但因为是二进制,由于满二进1的原则,所以这里乘的是2的二次方,这和10的2次方是一个道理。例如:123.45可以写为1.2345*10^2 将小数点朝前移动两位,并乘上10的2次方,使得整数只剩下一位。如上文所诉,我们可以得知了5.5的二进制运算法则,那么5.5这个浮点型数字的二进制这么表达呢?在科学计数法的基础上增加了一个符号位,也就是(-1)^ s。所以写法如下:(-1)^ 0 * 1.011 * 2 ^ 2。
2023-09-14 21:06:28
113
2
原创 JDK、eclipse软件的安装
变量名:JAVA_HOME变量值就是刚刚复制的路径 双击path 打印以下文字最后一直双击确定,安装环境完成。 选择好安装路径,点击 lanuch,安装完毕!
2023-09-13 19:32:23
340
原创 数据在内存中的存储——练习5
而且因为没有符号位,所以进制位可以肆无忌惮的+1,且在每次+1后进行了截断,而截断后的结果都不会超过。unsigned char的范围,也就是'255'
2023-09-13 15:10:36
37
原创 数据在内存中的存储——练习3
截断后因为需要打印成%u也就是打印成无符号整形,所以进行整形提升,因为截断后符号位是1,又因为是char类型,属于是有符号类型,所以看符号位进行补充,所以补1。以%u形式打印无符号进行打印,因为是无符号,所以没有原反补的概念,所以直接打印这一串得出结果。上图是3.1的答案,在分析3.1之前我们首先要明白一个东西, char的取值范围。以上是-128的原码、反码、补码,因为是char类型我们需要进行从右到左的截断。%u是无符号格式进行打印,或者说打印无符号整数。有符号的char类型的范围是-128到127。
2023-09-13 14:11:30
339
原创 数据在内存中的存储——练习2
char a=-1 与 signed char b =-1。且无符号的数字在整形提升时全部补0,所以用0来补充到32位。但是c是无符号类型,而%d打印的是有符号类型的。PS: 截断是指从右到左截断八个比特位。上图是-1的原码反码和补码。但因为打印的是有符号整数。
2023-09-13 13:48:55
41
原创 数据在内存中的存储——练习1
且a是地址,被转化后,地址变成了一个int的类型的地址。而在强制转化后的+1就是地址物理数据上面的+1。就相当于是加了一个字节的地址。
2023-09-13 13:31:02
35
原创 数据在内存中的存储(1)
而-5的原码是在5的原码基础上,将符号位从0改成1原码到补码是经过了取反变为反码,在反码的基础上+1得到补码。而补码转化为原码也是如此,进行反取后+1注意补码的取反不是反码。为什么呢?
2023-09-12 23:27:13
282
原创 strerror函数
函数声明: char * strerror ( int errnum );头 文 件:#include 返 回 值: 返回值为char * 类型。指向描述错误错误的错误字符串的指针。原理:在C语言的库函数中设计一些错误码,当我们库函数在调用的过程的中发生了各种错误,要记录下来,这时候记录的就是错误码。注意,当出现一连续的错误时,返回的只有第一个错误码。
2023-09-08 13:45:01
81
2
原创 结构体的简单介绍(3)——结构体的内存对齐
以上代码是寻求一个结构体在内存中所占的字节大小。按照平常的逻辑理论,这里的结构体大小理论上说,应该是六个字节,因为成员c1占一个字节,成员i占四个字节,成员c2占一个字节,所以加在一起一共是6个字节。但答案真是如此吗?结果算出的是12个字节。而后,我又将结构体的成员顺序进行调换,结果还会是12个字节吗?通过运算,我们得知,最后得到的是八个字节。是不是很奇怪,明明成员内容都是一样的,只不过调换了顺序,最后结构体的字节大小却发生了改变,这是为什么?其实这是和结构体的内存对齐有关!
2023-09-06 17:18:19
86
2
原创 结构体的简单介绍(2)
在声明结构的时候,可以不完全的声明。以上结构在声明的时候省略掉了结构体标签(tag)。那么会有什么影响呢?由于摘掉了标签,我们再main函数内进行变量赋值的时候,无从下手也无法成功赋值,所以得到结论,这种摘取标签的声明方式,只能使用一次,而这一次也只能是在声明的时候进行创建变量使用。当不看标签 ,我们可以发现两个结构体的成员一样,所以当我们进行以下操作时,是否成立呢?p = &x;
2023-09-05 15:41:44
103
原创 联合体(共用体)的简单介绍
联合也是一种特殊的自定义类型。这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
2023-09-02 16:33:56
214
1
原创 枚举的简单介绍
枚举顾名思义就是⼀⼀列举。 把可能的取值⼀⼀列举。⽐如我们现实⽣活中:⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举性别有:男、⼥、保密,也可以⼀⼀列举⽉份有12个⽉,也可以⼀⼀列举三原⾊,也是可以一一列举这些数据的表⽰就可以使⽤枚举了。
2023-09-02 09:53:59
145
1
原创 memcpy 与 memmove
memcpy函数是一个用于内存复制的函数,声明在 string.h 中(C++是 cstring)。作用是:以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。
2023-08-31 10:08:05
105
原创 VS的调试技巧
当我们发现程序中存在的问题的时候,那下⼀步就是找到问题,并修复问题。这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调 试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码, 重新测试。
2023-08-29 20:16:12
1320
1
原创 strlen函数
计算的是字符串str的长度,从字符的首地址开始遍历,以 '\0' 为结束标志,然后将计算的长度返回,计算的长度并不包含'\0'。
2023-08-27 10:43:18
346
2
原创 strcmp 的使用和模拟
strcmp是比较大小的函数。从字符串开始进行比较,如果两个相同位置的字符相同,那么继续往下进行比较,直到遇见不同的位置。从本质上,比较的是相对位置字符的ASCII值。比较的标准:当str1大于str2时,返回值是大于0的数当str1小于str2时,返回值是小于0的数当str1和str2相同时,返回值是0。
2023-08-26 16:48:03
111
1
原创 strstr函数
如果str2是str1的一部分,函数的返回值是str1中第一次出现的str2字符串的字符串首字符地址,如果 str2 不是 str1 的一部分,则返回一个空指针。匹配过程不包括终止空字符,但它到此为止。
2023-08-26 16:11:20
246
1
原创 数组和指针的练习解析(4)
且aa+1 又可以转化为aa[1]表示数组名,表示的是第二行的数组名,那么可以表示第二行第一个元素的地址而*就表示第二行第一个元素,此处的int*强制类型转化是没有用的。aa相当于首元素地址,在二维数组中首元素地址就是第一行的地址,而aa+1表示的就是第二行地址。ptr2-1就是第二行第一个元素减一,就是第一行最后一个元素,所以表示的就是元素5。
2023-08-25 09:55:37
65
1
原创 数组和指针练习解析(3)
题目:int main()int(*p)[4];p = a;return 0;思路分析:int(*p)[4];p = a;
2023-08-24 16:36:37
60
1
原创 %f占位符
通常情况下,当输入的数值或者打印的数值是float类型数据时,使用%f ,当然在精度更高的double数据类型下,也可以进行使用。结论:%.nf表示取小数点后面n位,当然若小数点后面的位数小于n则用0补齐。%f ,用来输出实数(包括单双精度),以小数形式输出。double类型数据默认情况下输出。float类型数据默认情况下输出7。
2023-08-22 19:57:19
218
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人