![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言专栏
文章平均质量分 56
本专栏主要讲解C语言学习的一些经验
阿超没有蛀牙
软件测试工程师
展开
-
浅谈时间复杂度与空间复杂度
要谈时间复杂度与空间复杂度,需要先了解,他们影响了什么。这里我们引出算法效率。算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。一、时间复杂度1.1 概念时间复杂原创 2021-07-21 15:28:51 · 181 阅读 · 0 评论 -
浅谈C++类与对象(一)
C/C++本质的区别就是编码过程中关注的点不一样,C语言更关注的是过程,C++更关注的是对象。由于关注的点不一样,因此产生了我们平时耳闻能详的说法。C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。一、面向对象C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。二、结构体与类首先我们来看看C++中的结构体和C语言中的结构体之间的关系,其原创 2021-05-11 16:13:24 · 226 阅读 · 0 评论 -
浅谈#pragma once与 #ifndef的区别
一、作用:为了避免同一个文件被include多次二、方式2.1 #ifndef #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #endif2.2 #pragma once#pragma once ... ... // 一些声明语句三、区别#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包原创 2021-04-06 09:57:12 · 131 阅读 · 0 评论 -
浅谈C语言中#define的用法
文章目录一、#定义标识符1.1 语法表示1.2 使用方法示例1.3 ;的使用二、定义宏2.1 什么叫定义宏?2.2 宏的声明方式:2.3 使用示例及避雷三、define替换规则四、带副作用的宏参数五、宏和函数对比六、命名约定一、#定义标识符1.1 语法表示语法表示:#define name stuff1.2 使用方法示例#define MAX 1000 //1000替换M#define reg register //为 register这个关键字,创建一个简短的名字#defi原创 2021-03-25 18:37:55 · 5228 阅读 · 1 评论 -
浅谈C语言文件操作
文章目录一、什么是文件1.1程序文件1.2数据文件二、文件名三、文件类型四、文件缓冲区五、文件指针六、文件的打开和关闭七、文件的顺序读写八、文件的随机读写8.1 fseek8.2 ftell8.3 rewind九、文件结束判定9.1 feof一、什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。1.1程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。1.2数据文件文件原创 2021-03-23 21:46:57 · 366 阅读 · 0 评论 -
浅谈结构体内存对齐
要谈论结构体内存对齐,我们就得先来看看结构体大小相关的知识。首先来看以下几个结构体大小。一、结构体常规认知struct S1{char c1; //1int i; //4char c2;//6};printf("%d\n", sizeof(struct S1));在我们的认知里,这个结构体的大小应该为11.但是我们来看看输出结果:从输出结果来看,与我们的预期是大相径庭。我们再来将结构体里面的成员变量的顺序进行变化来看看输出结果:输出结果又变成12了。再来看下一个结构原创 2021-03-11 17:09:59 · 250 阅读 · 2 评论 -
笔试题:杨氏矩阵
题目内容:有一个数字矩阵,矩阵的每行从左到右是递增的,从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。int Find(int arr[][5], int row, int col, int target){ //查找的本质:排除的过程 //从右上角开始比较,一次可以排除一行,或者一列 int i = 0; int j = col - 1; while (i < row&&j >= 0) { if (target < arr[i]原创 2021-03-09 21:42:20 · 154 阅读 · 0 评论 -
浅谈main函数返回值
我们在学习C语言的时候,会发现,我们所写的main函数返回值为0,我们都只知道这样写是对的,但是原因是什么呢?需要剖析这个问题,首先我们得考虑以下两个问题:1、main函数被谁调用?2、返回值 返给谁看?我们来回答这个问题:1、首先我们的操作系统在运行的过程中先调用startUp()这个函数,然后startUp()函数调用main()函数。2、返回给系统看。返回值返回,代表main()函数退出,代表程序退出,程序退出,就意味着对应的任务完成了。0->任务退出,且任务无错完成!0-&原创 2021-03-10 16:41:13 · 997 阅读 · 0 评论 -
puts、printf的使用异同(超完整!!)
我们在学习C语言的时候,肯定遇见过作用有点类似,但是却不一样,具体很难区分的情况。这篇博客我们来分别看一下这四个库函数的异同。一、puts1、首先是它的定义:int puts ( const char * str );2、头文件:#include (stdio.h)3、作用:字符串标准输出将按str指向标准输出(stdout)的C字符串编写,并附加一个新行字符(\n)。该函数开始从指定的地址(str)复制,直到它到达终止的空字符("\0")。此终止的空字符不复制到流中。注意,它不仅原创 2021-03-10 11:37:14 · 5389 阅读 · 0 评论 -
笔试题:字符串旋转
题目内容:写一个函数,判断一个字符串是否为另外一个字符旋转后的字符串。例如:给定S1=AABCD和S2=BCDAA,返回1给定S1=abcd和S2=ACBD,返回0;AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC#include <stdio.h>#include <Windows.h>#include <assert.h>//1、实现任意次数的左旋 //2、逐次进行左旋,然后不断进行比原创 2021-03-09 21:13:22 · 182 阅读 · 0 评论 -
需要用HICON去定义要添加的头文件
今天在移植代码的时候看到了HICON,移植过来之后是未定义的,于是就去查了一下。HICON 是微软平台bai下的图标句柄。类似的定义还zhi有HANDLE、HWND、HDC、HBITMAP等。遵循的dao命名规zhuan则为大写shu的H加上大写的句柄类型(其中HANDLE是通用句柄,没有类型)。在VC/MFC下,句柄其实就是一个用于兼容windows平台下其它编程语言的地址标记定义,其本质,是一个无类型指针:typedef void *HANDLE;typedef HANDLE HICON;//原创 2021-03-05 16:20:52 · 480 阅读 · 0 评论 -
浅谈整型数据在内存中的存储
首先整型数据类型都有哪些呢?char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形他们各占多少个字节呢?char/unsigned char :1字节char *:8字节short int:2字节int/unsigned int:4字节long int:8字节float:4字节double:8字节long long:8字节long double:16字节//这里以64位为例我原创 2021-02-01 20:10:09 · 1150 阅读 · 2 评论 -
const修饰指针
文章目录一、常量指针1二、常量指针2三、指针常量四、指向整型常量的常量指针4.1 修改指向的目标4.2 修改指向这篇博客我们来学习const修饰指针的几种情况。首先我们我们先罗列一下这四种情况。一、常量指针1二、常量指针2三、指针常量四、指向整型常量的常量指针一、常量指针1常量指针:指针指向的值不能修改(指针指向地址的具体指不能修改),但是指针的值可以修改(指针指向的地址可以修改)const 类型 * 指针名 = 地址例如: const int * p = &a;此时 指针p原创 2021-01-21 16:41:33 · 225 阅读 · 0 评论 -
调试实例(C/C++ VS为例)
这篇博客我们来看调试实例。首先是:实现代码:求 1!+2!+3! …+ n! ;不考虑溢出。int main(){int i = 0;int sum = 0;//保存最终结果int n = 0;int ret = 1;//保存n的阶乘scanf("%d", &n);for(i=1; i<=n; i++){int j = 0;for(j=1; j<=i; j++){ret *= j;}sum += ret;}printf("%d\n", sum);r原创 2021-01-21 15:06:48 · 263 阅读 · 0 评论 -
实用调试技巧(以C/C++、VS2015为例)
在我们写程序的过程中,调试是必不可少的一环,这关系着我们的代码能不能运行,能不能很好的运行。调试是每个程序员必须掌握的技能,没有选择的余地!这里我们以VS中的C语言为例,讲解一下实用调试技巧。一、什么是bug1.1 概念bug是计算机领域专业术语,bug原意是“臭虫”,现在用来指代计算机上存在的漏洞,原因是系统安全策略上存在的缺陷,有攻击者能够在未授权的情况下访问的危害。1.2 简介漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统原创 2021-01-19 18:53:51 · 621 阅读 · 0 评论 -
VS中常用的快捷键(超详细!!!)
1、窗口快捷键记忆诀窍:凡跟窗口挂上钩的快捷键必有一个W(Windows);Ctrl+W,W: 浏览器窗口 (浏览橱窗用有道的翻译是window shopping)Ctrl+W,S: 解决方案管理器 (Solution)Ctrl+W,C: 类视图 (Class)Ctrl+W,E: 错误列表 (Error)Ctrl+W,O: 输出窗口(输出Output;输出程序的的编译信息 ;可在vs中“工具”—-“选项”—-“调试”—-“输出窗口”进行配置需要查看哪些信息)Ctrl+W,P: 属性转载 2021-01-08 15:46:07 · 11106 阅读 · 1 评论 -
学会这几招,教你轻松告别error C4996
文章目录一、引入二、解决方案一、引入我们在使用VS进行C语言或者C++编程的时候,经常会遇见这种情况:这是VS微软在VS中不建议再使用C的传统库函数scanf,strcpy,sprintf等,所以直接使用这些库函数会提示C4996错误。主要原因是那些C库的函数,很多函数内部是不进行参数检测的(包括越界类的),微软担心使用这些会造成内存异常,所以就改写了同样功能的函数,改写了的函数进行了参数的检测,使用这些新的函数会更安全和便捷。关于这些改写的函数我们用专门去记忆,因为编译器对于每个函数在给出警原创 2020-10-13 17:35:03 · 1461 阅读 · 0 评论