- 博客(36)
- 收藏
- 关注
原创 可恶的匿名结构体类型
我最讨厌挤成一坨的代码。简直就是反人类。但是有些人就是觉得这样的代码简洁。匿名结构体类型就是一种挤在一起的代码。匿名结构体类型正常结构体类型struct Node{ int a; char b; float c;};匿名结构体类型struct{ int a; char b; float c;}x;struct{ int a; char b; float c;}a[20], *p;可以看到匿名结构体比正常的少了一个名字Nod
2021-06-06 13:02:48 1411
原创 C语言动态分配内存
这里写目录标题动态分配内存的由来动态内存函数的介绍malloc和free动态分配内存的由来我们已经掌握的内存开辟方式有:int a = 10; //在栈空间上开辟四个字节char arr[10] = {0}; // 在栈空间上开辟10个字节的连续空间上述开辟空间的方式有两个特点:空间开辟的大小是固定的。数组在声明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但对于空间的需求,有时我们需要的空间的大小在程序运行的时候才能知道,那数组编译时开辟空间的方式就不能满足了。这时候就只能
2021-06-03 21:26:00 269
原创 结构体内存对齐
结构体的声明结构的基础知识结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的声明struct tag{ member-list;}variable-list;例如描述一个学生:struct Stu{ char name[20];//名字 int age;//年龄 char sex[5];//性别 char id[20];//学号};//分号不能丢特殊的声明在声明结构的时候,可以不完全的声明比如://匿名结构
2021-06-02 18:24:47 92
原创 初识指针
指针是什么?在计算机科学中,指针( Pointer)是编程语言中的一个对象,利用地址,它的值直接指向( points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。——百度百科简而言之,指针是一种特殊的变量,它是用来存放地址的。(存放在指针中的值都被当成地址处理)int main(){ int a = 10; int* p = &a;//定义指针变量p,给p赋
2021-05-24 20:11:54 120
原创 生成不重复的三位数
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?int main(){ int i, j, k; for (i = 1; i < 5; i++) { for (j = 1; j < 5; j++) { for (k = 1; k < 5; k++) { if (i != j && i!=k &
2021-05-22 21:00:54 535
原创 兔子生崽
题目:古典问题(兔子生崽):假设一对小兔的成长期为一个月,即一个月可长成成兔,那么,如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月就开始生兔子,试问假如兔子都不死,问每个月兔子的总对数是多少,要求输出前40个月并且依次输出。程序分析:兔子的规律为数列1,1,2,3,5,8,13,21……即下下个月是上两个月之和(从第三个月开始)。这其实就是斐波那契。#include<stdio.h>int main(){ int f1 = 1, f2 = 1, i; for (i
2021-05-22 20:48:56 435
原创 判断某日是一年中的第几天
题目:输入某年某月某日,判断这一天是这一年的第一天?程序分析:以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天,就得出本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。#include<stdio.h>int main(){ int day, month, year, sum, leap; printf("请输入年、月、日,格式为:年,月,日(例如:2015,12,10)\n"); scanf("%d,%d,%d",&year,
2021-05-22 19:42:28 3663
原创 水仙花数
题目:打印出所有的“水仙花数”。所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。#include<stdio.h>int main(){ int i,x, y, z; for (i=100;i<1000;i++) { x = i % 10; y = i / 10 % 10; z = i /100 % 10; if (i ==( x * x * x + y * y * y +
2021-05-22 19:35:22 103
原创 秒懂地址与指针的关系
计算机的内存被划分为一个一个小的空间,每一个空间都被编上了编号。这种编号被称为地址。现在摆在我们面前有两个问题如何给编号,给什么样的编号呢?即如何编址?一个空间要给划分多大呢?如何产生地址我们在日常中经常说,我这个电脑是32位的,我这个电脑是64位的。这里的32位和64位分别指的是,有32根地址线和64根地址线。地址线就像电线,一旦通电里面的电流就有正负电之分。用1代表正电,0代表负数。以32位为例会产生如下可能000000000000000000000000000000000000
2021-05-19 22:37:40 3750
原创 几句话搞懂空间复杂度
空间复杂度不计算算法占用多少字节,他算的是大概的定义变量的个数。如果程序a定义了n个字节,程序b定义了n2个字节,这里我们称程序b的空间复杂度大于程序a。有人会问:如果程序a定义的是double型,程序b定义的是int型呢?不公平啊!其实计算机认为不同数据类型变量之间差别不大。就算是结构体也大不到哪里去。(嵌入式开发除外,嵌入式开发内存寸金寸土)例1:请问冒泡排序的空间复杂度是多少?void bubble_sort(int *a,int n){ assert(a); for (size_t
2021-05-19 14:19:41 280
原创 初识结构体
文章目录初识结构体结构体变量初识结构体结构体的定义形式为:struct tag{ member-list; //结构体所包含的变量或数组}variable-list; 结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。例如描述一个学生:struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char gro
2021-05-18 16:59:53 291 1
原创 时间复杂度
算法效率的度量是通过时间复杂度和空间复杂度定义的。一、时间复杂度算法的时间复杂度不是计算这个算法运行了多长时间,而是一个程序执行的大概次数。大O的渐进表示法//请计算一下Func1基本操作执行了多少次?void Func1(in N){ int count = 0; for(int i = 0; i < N; ++ i) { for(int j = 0 ; j < N ; ++ j) { ++count;
2021-05-16 23:40:39 369
原创 前端开发神器Emmet语法
Emmet语法的前身是Zen coding,它使用缩写,来提高html/css的编写速度,Vscode内部已经集成该语法。快速生成HTML结构语法快速生成CSS样式语法快速生成HTML结构语法生成标签直接输入标签名,按tab键即可,比如div然后tab键,就可以生成 如果想要生成多个相同标签,加上 * 就可以了,比如 div*3 就可以快速生成3个div如果有父子级关系的标签,可以用 >,比如ul > li就可以了如果有兄弟关系的标签,用+就可以了,比如 div+p如果生成
2021-05-15 20:02:06 136
原创 两张图搞懂大端和小端
什么是大端小端大端(存储)模式,是指数据的低位保存在內存的高地址中,而数据的高位,保存在内存的低地址中。小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。用下面VS2019运行代码举例int a = 20补码:00000000000000000000000000010100补码换算为十六进制:0x00000014根据下面图示,0x00000014中低位14,放在了内存的低地址中。所以当前VS2019采用的是小端存储。如果十进制的20不好理解,我
2021-05-15 18:58:20 1353 1
原创 两分钟看懂原码、反码和补码
数据在内存中是如何存在的呢?我们不妨用VS2019的调试窗口来看一下下面的代码。int main(){ int a = 20; int b = -10; return 0;}查看a的地址存放的数值,是一个十六进制数:14 00 00 00再查看a的地址存放的数值,也是一个十六进制数:f6 ff ff ff到底是怎么存的?使20存成14 00 00 00,-10存成f6 ff ff ff呢?原码、反码和补码计算机中的有符号数有三种表示方法,即原码、反码和补码。有符号数分为正数和
2021-05-14 21:30:20 1100
原创 整型提升
整型提升是隐式类型转换的一种,隐式类型转换顾名思义就是偷偷的进行转换。这种类型转换所做的动作我们平时都不会注意到,因为他是偷偷的发生的。C的整型算术运算总是至少以缺省整型类型的精度来进行的。为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。——《C和指针》这是书上的概念,太长,而且还看不懂。下面我举个例子char a,b,c;......a = b + c;b和c的值被提升为普通整型,然后再执行加法运算。加法运算完成之后,结果将被截断,然后再
2021-05-14 17:16:49 766 6
原创 比特、字节
位(bit)来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位,每个0或1就是一个位(bit),11010100是一个8位二进制数。位是数据存储(计算机中信息)的最小单位。计算机中的CPU位数指的是CPU一次能处理的最大位数。例如,32位计算机的CPU一次最多能处理32位数据。字节(Byte)8bit就称为一个字节(Byte), 1Byte=8bit。记为Byte或B,是计算机中信息的基本单位。字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定
2021-05-13 23:00:37 2171
原创 逻辑与和按位与、逻辑或和按位或的区别
首先分别明确一下他们各自的概念。按位与和按位或按位与和按位或都属于位操作符。注意:位操作符的操作数必须是整数。按位与“&”按二进制位对应的位进行与运算,对应位都为1时,结果才为13&53的二进制: 00000000000000000000000011 //32位系统中5的二进制: 00000000000000000000000101 //32位系统中按位与的结果:00000000000000000000000001代码验证int main(){
2021-05-13 21:57:01 15574 2
原创 C语言操作符详解
目录操作符和表达式操作符算术操作符移位操作符操作符和表达式操作符分类:算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符算术操作符 + - * / %除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。对于/操作符如果两个操作数为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。%操作符的两个操作数必须为整数。返回的是整除之后的余数。int main(){ int a = 5 / 2; //商2余1 printf("
2021-05-13 18:49:40 114
原创 按位取反的工作原理
在了解是什么按位取反之前,首先要知道数据在内存中是以二进制补码的形式存放。比如:-1-1的原码:10000000000000000000000000000001-1的反码:11111111111111111111111111111110-1的补码:11111111111111111111111111111111经过推导得出-1的补码是11111111111111111111111111111111我们用VS2019验证一下。int main(){ int a = -1; r
2021-05-13 18:03:45 2233
原创 C语言数组
目录一维数组的创建和初始化数组的创建数组的初始化补充:sizeof与strlen的区别不同存储方式sizeof和strlen的值一维数组的使用一维数组的创建和初始化数组的创建数组是一组相同类型元素的集合。数组的创建方式:type_t arr_name [const_n]//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小数组创建的实例创建一个数组存放10个整型//正确int arr[10];//错误int n = 10;char ch[n
2021-05-08 22:31:48 239 2
原创 C语言函数递归
目录函数递归什么是递归递归的两个必要条件函数递归什么是递归程序调用自身的编程技巧称为递归(recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:把大事化小。递归的两个必要条件存在限制条件,当满足这个限制条件的时候,递归便不再继续。每次
2021-05-07 14:21:08 259
原创 C语言函数
目录函数定义库函数学习strcpy函数学习memset函数自定义函数函数定义函数就是一段可以重复调用的、功能相对独立完整的程序段。//一个只完成加法的自定义函数自定义函数#include <stdio.h>int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(){ int a = 10; int b = 20; int sum = Add(a,b);
2021-05-04 22:31:05 442
原创 VS2019逐过程调试与调试窗口的使用
今天在学习库函数时发现。strcpy的解释如下:Copy stringCopies the C string pointed by source into the array pointed by destination, including the terminating null character (and stopping at that point).链接: CPLUSPLUS.com.这里我看到strcpy函数的英文解释里说:“将源头所指向的C字符串复制到目标所指向的数组中,包括结束
2021-04-25 12:00:43 7015 1
原创 VS2019管理和阅读开源代码
当你从git或者别人那里获得一份源码如何在本地跑一跑呢?今天我们就来学习一下如何使用VS2019管理和阅读开源代码。如果直接点代码文件正确的做法是:1、Visual Studio 新建一个空的 Win32 控制台程序2、下载redis源码,并解压3、将解压好的全部文件全都复制到项目文件下4、选中要添加的文件,右键选择菜单“包括在项目中”5、接着选择“文件”菜单“全部保存”菜单项保存(快捷键 Ctrl + Shift + S )最终效果...
2021-04-07 10:00:28 902
原创 字符型数据和字符串常量
字符型数据是计算机中用来表示英文字母、符号、汉字的数据。字符型数据只占用1个字节(8位)的内存单元。字符型常量字符串常量是由一对双引号括起来的字符序列。例如,“CHINA”,“C program”,“$12.5”等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下...
2021-04-05 21:34:15 3055
原创 C语言算术运算符、自增自减运算符和复合赋值运算符
自增自减运算符前置运算——运算符放在变量之前:++变量、–变量。先使变量的值增(或减)1,然后再以变化后的值参与其他运算,即先增减后运算。后置运算——运算符放在变量之后:变量++、变量–。变量先参与其他运算,然后再使变量的值增(或减)1,即先运算后增减。复合赋值运算符复合运算符具体有如下几种:+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=。其含义为exp1 op= exp2等价于exp1=exp1 op exp2例如:a+=3 等价
2021-04-03 21:11:27 1248
原创 Visual Studio 2019 新建C语言程序
Visual Studio 2019 新建C语言程序1. 选择创建新项目2. 选择空项目,单击下一步3. 填写项目名称(生成的文件夹名称和工程名都是这个),我这里填入hello,保存位置选择为E盘一个名为C的文件夹,此时应该在工程建立ok后,这个名为C的文件夹会生成一个hello的文件夹,勾选解决方案和项目放在同一目录中,便于调试。全部勾选完成后,单击创建。注意,此时电脑可能会短暂卡死,正常现象稍等几秒就好。...
2021-04-03 19:27:59 2964
原创 VS2019调试功能学习
现在我们尝试对以下代码(求两个正整数的最大公因子,使用欧几里得算法(Euclid))用VS2019进行调试修改bug:#include<stdio.h>void main(){ int m, n, r; printf("Please input two positive integer:"); scanf_s("%d%d", &m, &n); while ( n != 0) { r = m % n; //求余数
2021-04-03 19:04:15 1275
原创 C语言选择结构的程序设计
C语言中,提供了if语句和switch语句来实现选择结构,if语句用于两者选一的情况,而switch语句用于多分支选一的情形。if语句Created with Raphaël 2.2.0开始条件表达式Created with Raphaël 2.2.0开始我的操作确认?结束yesnoCreated with Raphaël 2.2.0开始我的操作确认?结束yesno...
2021-04-02 21:29:28 1073
原创 VS2019中出现‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead问题
VS2019中出现’strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead问题完整错误:错误 C4996 ‘strcpy’: This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online
2021-03-30 22:44:33 23514 8
原创 HTML5入门
HTML5入门一、网页开发工具1、VSCode的使用2、VSCode推荐插件3、VSCode 工具生成骨架标签新增代码3.1、文档类型生命标签3.2、lang 语言种类3.3、字符集二、web标准1、为什么需要Web标准2、web标准的构成三、HTML语法规范四、HTML标签1、HTML基本结构标签2、HTML常用标签2.1、标签语义2.2、标题标签3、段落和换行标签3.1、段落标签3.2、换行标签4、文本格式化标签5、div和span标签6、图像标签和路径6.1、图像标签6.2、路径6.2.1、路径之相对
2021-03-28 23:05:15 508
原创 JDK安装与环境变量配置
各版本JDK下载地址https://www.oracle.com/technetwork/java/javase/archive-139210.htmlJDK下载红圈处要点JDK安装打开JDK点击下一步完成安装环境变量配置1、打开控制面板,点击“系统和安全”,点击“系统”,点击“高级系统设置”2、在弹出的“...
2019-12-31 10:06:56 412
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人