c语言
C语言知识
麦克波菲柯特
人需要先说很多话,然后保持静默
展开
-
C语言指针总结
前言 今儿个看了看指针,发现指针是一个好东西啊,万物皆地址这句话来形容C语言还是听恰当的,就连函数名都可以是地址,看一看吧。函数指针#include<stdio.h>int max(int a,int b){ return a>b?a:b;}int main(){ int a,b; int (*p)(int,int)=max; scanf("%d %d原创 2017-05-14 16:42:26 · 1063 阅读 · 2 评论 -
C语言的简单应用(五)上
第五天 今天更新一下期待已久的排序篇,排序算法是数据结构中很火的存在,面试官也超级青睐的地方。排序(Sorting )是计算机程序设计中的重要操作,排序的基本操作有两种:1、比较两个关键字值的大小 2、根据比较的结果,移动记录的位置。排序的相关属于 稳定排序与不稳定排序:假定待排序的序列中存在多个记录具有相同的键值,若经过排序,这些记录的相对次序仍然保持不变,则这种排序方法是稳定的;反之,原创 2017-07-17 21:01:39 · 580 阅读 · 0 评论 -
征服C指针之没想到你是这样的指针
虚地址 现在的机器可牛着呢,基本上都不以真面目面对大家,而是以虚地址来存储程序,当然 这里有些复杂,我只能说的适可而止(涉及操作系统),比如我写了一个打印地址的程序,然后在两个窗口打开(这个应该不难吧),你会发现打印出来的时同一个地址,这个原因就是:当今的操作系统都会为应用程序的每一个进程分配独立的虚拟地址空间,这样的话一个程序因为内存破坏了,也不会影响到其他的应用程序。 结论:在如今的运行环境原创 2017-05-16 23:35:00 · 772 阅读 · 0 评论 -
C语言的简单应用(五)下
选择排序:简单选择排序、堆排序简单选择排序(平均时间O(n²),不稳定)#include<stdio.h>#define max 10void simplesort(int a[],int len){ int i,j,k,temp; for(i=1;i<=len-1;i++) { k=i; for(j=i+1;j<=len;j++原创 2017-07-18 21:27:55 · 596 阅读 · 0 评论 -
炸弹超人C语言
炸弹超人一个简单的枚举,暴力题,通过两层for,统计满足的点,然后及时更新sum,最后输出当前记录的点和sum。#include<stdio.h>#define max 20int main(){ char a[max][max]; int i,j,sum,map=0,p,q,x,y,n,m; printf("input n,m:"); scanf("%d,%d原创 2017-07-19 20:11:48 · 2067 阅读 · 0 评论 -
模拟链表
最近,突然发现周围多了一些杂音,仔细一听,我去居然是广场舞,是时候考虑一下我的暑假计划了……… 今天要讲的是关于模拟链表的故事,这个模拟链表很有意思,不知道面试官会不会很亲睐模拟链表的结构 由两部分组成,分别是数据数组data[]和序号数组right[]序号数组right[]的作用是记录数据数组中右边的序号举个例子 right[1]=2; 上面记录的就是数据域序号1旁边是序号2.原创 2017-08-02 19:06:35 · 532 阅读 · 0 评论 -
区别:新旧C/C++之间的头文件
本文讲解的是关于C语言和C++头文件之间的一些事情,主要涉及到两者之间的区别C语言和C++ C++ 是在C语言的基础上发展起来的,C++ 包含了C语言的所有内容,C语言是C++的一个部分,它们往往混合在一起使用,所以统称为 C/C++。C/C++主要用于PC软件开发、Linux开发、游戏开发、单片机和嵌入式系统。20世纪80年代,AT&T Bell(贝尔)实验室的Bjarne Stroustr转载 2017-07-26 16:56:55 · 1118 阅读 · 0 评论 -
二分图最大匹配
二分图的定义 如果一个图的所有顶点可以被分为X和Y两个集合,并且所有边的两个顶点恰好一个属于集合X,另一个属于Y,即每个集合内的顶点没有边相连,那么此图就是二分图。例图: 增广路 找到一条增广路就是使得二分图的配对数加一,增广路的本质是一条路径的起点和终点都是未被配对的点。最大匹配 在当前匹配方案下再也找不到增广路,那么当前匹配就是最大匹配。算法 1、首先从任意一个未被配对的原创 2017-08-12 22:28:47 · 475 阅读 · 0 评论 -
C语言的伪随机数
一直想好好的系统的学习一下C语言的伪随机数,今天终于逮到机会了伪随机数 C语言中有可以产生随机数据的函数,需要添加stdlib.h和time.h头文件。首先在main函数开头加上srand(unsigned)time(NULL))。 先来介绍一下srand 头文件:<stdlib.h> 定义函数:void srand (unsigned int seed); 函数说明:srand()用来原创 2017-08-22 16:00:37 · 3700 阅读 · 0 评论 -
大整数运算
A+B问题 对于A+B问题,当然如果A和B是属于int范围内的话,应该会轻松的解决。然而假若A和或者B是超过int范围的数字,那么就无法通过简单的加法来实现了,此类问题就是 大整数加法问题解法:可通过字符串的形式先存储A和B(输入的顺序和存储的顺序要逆转),然后,再模拟加法的过程,最后再将结果打印出来即可。最难的莫过于模拟加法的过程了,不过理解了还是挺简单的代码#include<stdio.h>原创 2017-08-23 17:38:48 · 620 阅读 · 0 评论 -
C/C++的传指针和引用
人老了就是会糊涂,记录一下C/C++中传指针和引用 的区别,免得再去找来找去传指针#include<stdio.h>void swap(int*a,int*b){ int temp=*a; *a=*b; *b=temp;}int main(){ int a=1,b=2; swap(&a,&b); printf("a=%d,b=%d",a,原创 2017-08-23 21:04:02 · 619 阅读 · 0 评论 -
简单递归应用
递归是一种十分神奇的东西,所以有必要好好的研究研究一下它还记得上次的递归逆序吗—-题目一 递归逆序解法很精彩,利用递归的特性,递是梳理问题,归是解决问题。所以在递归返回时解决了字符逆序的问题。再看一例 输入一个数字n,打印出n的全排列#include<stdio.h>#define max 20int a[max],book[max]={0} ,n;void dfs(int step)原创 2017-07-20 16:27:37 · 688 阅读 · 0 评论 -
C语言的简单应用(四)
第四天日子过得有些快,现在是2017/7/16日,手头上的东西还有一大堆,继续推进中。。。 1、题目:打印出杨辉三角形(要求打印出10行如下图) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1….. #include<stdio.h>int main(){ int i,j,a[10][10];原创 2017-07-16 12:04:58 · 490 阅读 · 0 评论 -
C语言的简单应用(三)
第三天 1、题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。 分析:这种方式很好,get到了一个逆序的新用法#include<stdio.h>#define MAX 5void print(int n){ int a; if(n<=1) { a=getchar(); putchar(a); }原创 2017-07-15 18:28:43 · 754 阅读 · 0 评论 -
C语言指针与二维数组
前头话 上次我们说到指针是一个好东西啊,指针极大的缓解了内存小的鸭梨,所以对于我们来说,学号指针就是坚实的第一步,今天我们谈一谈C语言指针和二维数组转载自C语言中文网二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有“缝隙”。以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9,转载 2017-05-14 16:22:43 · 1863 阅读 · 3 评论 -
C语言(New B语言)
C语言可是一门NB语言,好家伙,今天我就要来介绍介绍这门NB语言 众所周知,C原本是为了开发UNIX操作系统而设计的语言。如此说来,好像C应该比UNIX更早问世,可惜事实并非如此,最早的UNIX是用汇编来写的。因为厌倦了总是苦哈哈地使用汇编语言进行编程,UNIX的开发者Ken Tompson开发了一种称为“B”的语言。 在这之后的1971年,Ken Tompson的同事Dennis R原创 2017-05-15 21:18:47 · 3781 阅读 · 0 评论 -
C语言之const与指针
const大家一定都不陌生,是一个用来修饰变量的类型,在C语言中const和指针的考点一直是面试题的热门,乘此机会,我来趴一趴这个神奇的家伙const char*str1;char*str2; const 和非 const 类型转换 因为通过 str1 不能修改数据,而赋值后通过 str2 能够修改数据了,意义发生了转变,所以编译器不提倡这种行为,会给出错误或警告。 也就是说,原创 2017-05-14 21:29:53 · 439 阅读 · 0 评论 -
征服C指针笔记之关于指针
NULL、0、‘\0’ 关于这一点可以这么去理解:NULL是空指针,’\0’是空字符,0是值为0,一般来说大多数机器都认为NULL就是空字符的意思(一般来说),但是也有一些机器在定义NULL的时候,我们发现它的宏定义不是(#define NULL 0)那就悲剧了,这个时候的空指针就不能简单的理解为是空字符了,而要理解成定义的时候的字符了。在C语言中,当int*p=1;的时候,是会报错的,虽然都是i原创 2017-05-15 22:50:24 · 523 阅读 · 0 评论 -
ANSI/ISO C的保护规则
”在不同类型见提升操作数的相对简单的处理规则“在ANSI/ISO C中有了一些轻微的改变举个例子: ERROR : ”semantics of ’ >’ change in ANSI C 意思是错误,语法变化存在于ANSI C。 上面指出了有些代码在ANSI C的“值保护”规则下得到的结果可能跟老的“无符号保护”规则下得到的结果不同。这条警告事实上指出的是:当两个不同的类型出现在二元原创 2017-06-04 18:20:57 · 959 阅读 · 0 评论 -
机器大小端存储问题
今天在进行计算机组成原理实验的过程中,偶然回想起老师上课讲起的关于机器大小端的问题,遂进行一番探究机器在存储字节的时候一般有两种存储方式,一种是大端存储,一种是小端存储大端存储(百度百科) 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。小端存原创 2017-05-31 18:00:01 · 1277 阅读 · 0 评论 -
从本质理解C指针的应用(1)
C指针说到底就是一种操作符,所以想要正确的理解C指针,那么最重要的就是莫过于理解操作符了为了理解有些操作符存在的限制,你必须理解左值和右值(左值和右值)之间的区别。这两个术语是多年前由编译器设计者所创造并沿用至今。 左值就是那些能够出现在赋值符号左边的东西。右值就是那些可以出现在赋值符号右边的东西。这里有一例子:a=b+25;a是一个左值,因为它标识了一个可以存储结果的地点,b+25是一个右值,因原创 2017-06-20 22:35:38 · 779 阅读 · 2 评论 -
从本质理解C指针的应用(2)
前面我们提到过要想真正的理解C指针,那么对于它的操作符自然而然的需要十分的熟悉,上文说到左值和右值对于C指针的重要性,今天我们就来具体的谈一谈C 指针的应用char ch='a';char *p=&ch;上面的代码十分的清晰,初始化了一个值为’a’的字符变量ch,和一个值为ch地址的指针变量p,众所周知,声明一个指针变量并不会自动的分配任何内存,在对指针执行间接访问前,指针必须进行初始化:使它指向原创 2017-06-22 11:21:55 · 537 阅读 · 0 评论 -
C语言的简单应用(一)
最近得到一份C语言的简单题库,感觉学一学还是挺不错的,打算每天更新10题,共计10天。 第一天 1、题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔 子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数 为多少?#include<stdio.h>int main(){ int i,f1=1,f2=1; for(i=1;i原创 2017-07-13 18:38:43 · 632 阅读 · 0 评论 -
C语言的简单应用(二)
第二天 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?#include<stdio.h>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&&j!=k&&k!=i) printf("%d%d%d\原创 2017-07-14 11:10:51 · 450 阅读 · 0 评论 -
C语言之简单的位操作面试题
不得不说位操作确实是一个十分不错的操作,只是简单的几步就足以笑傲江湖,今天看两道简单位操作面试题二进制中1的个数:实现一个函数,输入一个整数,输出该整数二进制中1的个数分析:这还不简单,直接让这个整数依次往右边移动一位,与1做与运算&,然后统计1的个数,等等,有诈,万一是负数的话,这不就成死循环了吗,思考片刻,简单,这次就让1不断的往左边移动,然后去与整数做与运算&,这也是可以的。。。再等等,万一这原创 2017-11-23 11:39:54 · 996 阅读 · 0 评论