C语言之路
文章平均质量分 51
oodcloud
思可相反,得须相成。
展开
-
C中的优先级
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .原创 2015-11-01 18:51:21 · 668 阅读 · 0 评论 -
对调数问题
题目内容:一个两位正整数;将个位与十位对调,得到另一个两位正整数,我们称这两个数互为对调数。现给定一个两位正整数,问是否能找到另一个对调后不同的两位正整数,使得这两个正整数之和等于他们对调后的数之和?例如:56+54=65+45/* title:对调数问题 author:王玉杰 time:2015年9月19日20:10:40*/#includevoid main(){原创 2015-09-19 20:22:05 · 2077 阅读 · 1 评论 -
判读平年还是闰年
/* title:判断闰年 author:王玉杰 time:2015年9月19日19:36:08*/#includevoid main(){ int year; while(1) { scanf("%d",&year); if(year==0) break; if((year%4==0 && year%100!=0) || year%400==0)/原创 2015-09-19 19:47:17 · 622 阅读 · 0 评论 -
卖西瓜问题
题目是:第一小时买了全部的1/2又1/2,第二小时买了全部的1/3又1/3,第三小时买了全部的1/4又1/4,第四小时买了全部的1/5又1/5最后剩下11个西瓜问原有多少个西瓜?????/* title:卖西瓜 author:王玉杰 time:2015年9月19日14:31:42*/#includevoid main(){ int f[5]; int i;原创 2015-09-19 14:35:51 · 1787 阅读 · 0 评论 -
捕鱼问题
题目: A、B、C、D、E5个渔夫夜间合伙捕鱼,各自在河边的树丛中休息。待日上三竿,渔夫A第一个醒来,他将鱼分作5份,把多余的一条扔回河中,拿自己的一份回家了。渔夫B第二个醒来,也将鱼分作5份,扔掉多余的一条,拿走自己的一份,接着后三个也按同样的办法分鱼,问5个渔夫至少合伙捕了多少条鱼/* title:捕鱼 author:王玉杰 time:2015年9月19日11:2原创 2015-09-19 13:25:43 · 2766 阅读 · 0 评论 -
对C语言输入输出流和缓冲区的深入理解
导读:对C语言输入输出流和缓冲区的深入理解,C语言缓冲区(缓存)详解,缓冲区又称为缓存,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区,为什么要引入缓冲区,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲转载 2015-10-06 10:08:17 · 25910 阅读 · 5 评论 -
国外程序员推荐:每个程序员都应读的书
“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西。” 很多程序员响应,他们在推荐时也写下自己的评语。以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书。其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语。下面就按照各本书转载 2015-10-05 23:20:39 · 661 阅读 · 0 评论 -
深入理解c语言指针的奥秘
指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int转载 2015-10-05 23:07:42 · 401 阅读 · 0 评论 -
指针找错题
试题 1: 以下是引用片段: void test1() //数组越界 { char string[10]; char* str1 = "0123456789"; strcpy( string, str1 ); } 试题 2: 以下是引用片段: void test2() {转载 2015-10-05 22:25:40 · 454 阅读 · 0 评论 -
深入理解按位异或运算符
原文地址 http://www.cnblogs.com/this-543273659/archive/2011/08/30/2159819.html参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0按位异或的3个特点:(1) 0^转载 2015-10-05 22:16:15 · 783 阅读 · 0 评论 -
细说结构字节对齐
1. 概述 本文讨论了结构的自然边界对齐,在缺省情况下,c编译器为每一个变量或数据单元按其自然边界对齐条件分配空间。 但可以通过四种方法来更改C编译器的缺省字节对齐方式,即可以指定边界对齐。 在阅读完本文档后,将会更深入地了解一个结构的sizeof到底应当是多少。2. 自然边界对齐 在C语言中,结构是一种复合数据类型,其构成元素既可以是基转载 2015-10-05 22:03:04 · 337 阅读 · 0 评论 -
C语言编译全过程
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-->预编译处理(.c)-->编译、优化程序(.s、.asm)-->汇编程序(.obj、.o、.a、.ko)-->链接程序(.exe、转载 2015-10-05 23:16:54 · 2232 阅读 · 0 评论 -
深入学习C语言系列(二): #define与typedef
#define与typedef先举个例子:#define PI 3.1415926;复制代码上面这行代码的意思是:将3.1415926用PI来代替,后面的代码中凡是要用到3.1415926的地方皆可写作PI。值得注意的是,define语句是被编译器在“预编译”阶段进行“替换”处理的,也就是说,当我们生成可执行文件的时候,可执行文件里并没有转载 2015-10-05 23:06:31 · 880 阅读 · 0 评论 -
C语言深入学习系列+-+字节对齐and内存管理
用C语言写程序时需要知道是大端模式还是小端模式。 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。 为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8转载 2015-10-05 23:01:19 · 526 阅读 · 0 评论 -
堆和栈的区别
堆(Heap)栈(Stack) 一个由c/C++编译的程序占用的内存分为以下几个部分 :1、栈区(stack) —— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) —— 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与转载 2015-10-05 22:41:42 · 320 阅读 · 0 评论 -
测试自己的指针掌握情况
想想它们的结果分别是什么,欢迎有兴趣的朋友踊跃回答。1、#include int main(void) { int a[5]={1,2,3,4,5}; int *ptr=(int*)(&a+1); int *ptr1=(int*)((int)a+2); printf("%x %x\n",转载 2015-10-05 22:40:31 · 464 阅读 · 0 评论 -
杨辉三角
/*title:杨辉三角author:王玉杰time:2015年9月19日20:50:25*/#includevoid main(){ int i,j; int a[11][11]; for(i=1;i<=10;i++) { a[i][1]=1; a[i][i]=1; for(j=2;j<i;j++) { if(i>=3) a[i][j]=a[原创 2015-09-19 20:51:59 · 531 阅读 · 0 评论 -
阶梯问题
设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,刚好到阶顶,问共有多少阶梯?(求所有三位数的阶梯数)问题详解: 按题意可知,总阶梯数对2,3,5,6,7,取余分别为1,2,4,5,0;则有总阶梯i i%2=1; i%3=2; i%5=4; i%6原创 2015-09-19 19:31:06 · 1374 阅读 · 0 评论 -
printf和scanf的原函数
函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]);scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。其调用格式为: scanf("",);scanf()函数返回成功赋值的数据项数,出错时则返回EOF原创 2015-10-14 22:27:37 · 2535 阅读 · 0 评论 -
相同的字符串常量是可以共享内存的
原创 2015-10-14 21:55:01 · 954 阅读 · 0 评论 -
深度理解C指针---读书笔记
今天没带记笔记的本子,今天课比较多,所以就没带。不多说了,进入正题:-------------------------------------------------------------------------华丽风格线------------------------------------------------------------------------------------原创 2015-10-14 19:00:29 · 866 阅读 · 0 评论 -
指针数组实现录入信息并输出
#include#include#includeint main(){ int i; char name[32]; char *names[30]; size_t count =0; printf("enter to name\n"); for(i=0;i<4;i++) { scanf(" %s",name); names[i]=(char *)ma原创 2015-10-14 20:47:48 · 1013 阅读 · 0 评论 -
堆、栈面面观
学习C语言,我们都听过堆(heap)和栈(stack)的概念。需要注意的是:有些地方“堆栈”这个词特指的是栈,而不是堆和栈。命名约定:本文中堆栈一次出现的地方,指的是两种东西,而非一种。 在数据结构中,我们也听过栈和堆这两种数据结构,当然和我本文要讲的东西是不同的概念。不过数据结构中的堆(算法、数学意义上的一种抽象),和本文中的堆(实际存在的存储区)有一共同之处就是FILO转载 2015-10-12 22:50:43 · 765 阅读 · 0 评论 -
X86-64寄存器和栈帧
概要说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64;正是由于能向后兼容,AMD公司打了一场漂亮翻身战。导致Intel不得不转而生产兼容AMD64的CPU。这是IT行业以弱胜强的经典战役。不过,大家为了名称延续性,更习惯称这种系统结构为x86-64X86-64在向后兼容的同时,更主要的是注入了转载 2015-10-12 22:49:34 · 488 阅读 · 0 评论 -
C语言中static变量详解
Static翻译出来是“静态”“静止”的意思,在C语言中的意思其实和它的本意差不多,表示“静态”或者“全局”的意思,用来修饰变量和函数。经static修饰过后的变量或者函数的作用域或者存储域会发生变化,而由static修饰的变量在初始值方面也会表现出static关键字的优势。想知道经static修饰过后的变量或者函数的作用域或者存储域发生了什么变化吗,发生变化的原因是什么吗?请大家继续往下看!转载 2015-10-11 14:25:30 · 711 阅读 · 0 评论 -
C语言面试
2、评价下面的代码片断:unsigned int zero = 0;unsigned int compzero = 0xFFFF;对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:unsigned int compzero = ~0; 这一问题真正能揭露出应试者是否懂得处理器字长的重要性。在我的经验里,好的嵌入式程序员非常准确地明白硬件的细节和转载 2015-10-11 12:13:59 · 636 阅读 · 0 评论 -
统计各种字符个数
/*title:统计个字符个数author:王玉杰time:2015年9月20日11:58:34*//* content:输入一组字符,要求分别统计出其中的英文字母,数字,空格,以及其他字符的个数;*/#includevoid main(){ char c; int n=0,m=0,i=0,j=0; while((c=getchar())!='\n') {原创 2015-09-20 12:13:13 · 1165 阅读 · 0 评论 -
平面分割
/*title:平面分割author:王玉杰time:2015年9月20日18:21:32content:*/#includevoid main(){ int a,i,n; a=2; while(1) { scanf("%d",&n); if(n==0) break; for(i=2;i<=n;i++) { a=a+2*(i原创 2015-09-20 18:38:30 · 804 阅读 · 0 评论 -
求学生平均身高
/*title:求学生平均身高author:王玉杰time:2015年9月20日14:36:42*///content:输入学生数并逐个输入学生的身高,输出平均身高。#includevoid main(){ int n,i; float sum=0,m; printf("输入学生的个数"); scanf("%d",&n); for(i=1;i<=n;i++) {原创 2015-09-20 14:52:35 · 3681 阅读 · 0 评论 -
删除字符串中连续字符
/*title:删除字符串中连续字符author:王玉杰time:2015年9月20日13:06:36*///content:输入一个字符串,输入要删除的位置及长度,输出完或删除操作后的字符串。#include#includevoid main(){ char a[50]; int m,b,c,i,j; printf("请输入一个字符串"); gets(a); p原创 2015-09-20 13:08:23 · 1187 阅读 · 0 评论 -
求浮点数是否相等
#include#includevoid main(){ float a=123.43; float b=123.65; float c=123.43+123.65; if(abs((a+b)-c)<1e-6)//若用if((a+b)==c)则不可以,因为浮点数是不精确的,如b=123.65,在计算机的就可能会不一样,大家可以试试;输出b看看 printf(原创 2015-09-20 18:45:50 · 448 阅读 · 0 评论 -
猴子吃桃两种方法
/*title:猴子吃桃author:王玉杰time:2015年9月20日12:13:58*//* content:有一只猴子第一天摘下若干个桃子,当即吃掉了一半,又多吃了一个; 第二天又将剩下的桃子吃掉一半,又多吃了一个; 按照这样的吃饭每天都吃掉前一天剩下的一半又多一个。 到了第10天,就剩下一个桃子。问题,这个桃子第一天摘了多少个桃子。*//*#includevoid原创 2015-09-20 12:33:22 · 1413 阅读 · 0 评论 -
灯塔数量
/*title:灯塔数量author:王玉杰time:2015年9月20日14:56:29*///content:一个灯塔有8层,共有765盏灯,其中每一层的灯数都是其相邻上层的两倍,求最底层的灯数和最上层数。#includevoid main(){ int i,sum,n=1,b; while(1) { b=n; sum=0; for(i=1;i<8;i++)原创 2015-09-20 15:24:35 · 1132 阅读 · 0 评论 -
堆和栈深层理解
一、堆和栈的概念区别堆:是大家共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程 初始化的时候分配,运行过程中也可以向系统要额外的堆,但是记得用完了要还给操作系统,要不然就是内存泄漏。堆里面一般 放的是静态数据,比如static的数据和字符串常量等,资源加载后一般也放在堆里面。一个进程的所有线程共有这些堆 ,所以对堆的操作要考虑同步和互斥的转载 2015-10-05 22:18:03 · 1797 阅读 · 0 评论 -
详细分析内存泄露
一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,使用完后必须显式释放的内存。C++中使用new和new[]实现从堆中分配到一块内存,使用完后,程序必须负责相应的调用delete或delete[]释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。下面4种内存泄露分类概括了常见的绝大部分的内存泄露的情形。 1.常发性内存泄漏。发生内存泄漏的代码会被多次转载 2015-10-05 22:10:09 · 680 阅读 · 0 评论 -
函数型指针
一个函数可以返回多种类型,如整型 字符型 浮点型 ,还有指针型;解析下面的函数型指针:此函数是求一个数组中的最大值#includeint *max_1(int *x,int y);//int *max_1(int *x,int y)是指返回的是一个指针类型 如int MAX(int *x,int y)则是返回int 型就是return的返回类型void main()原创 2015-09-14 16:00:42 · 577 阅读 · 0 评论 -
寻找指定元素的指针
//寻找指定元素的指针#includeint a[]={1,2,3,4,5,6,7,8,9,10,20,30,40};int search(int *pt,int n,int key){ int *p; for(p=pt;p<pt+n;p++) if(*p==key) return p-pt; return 0;}int *find(int *pt,int n,i原创 2015-09-29 16:07:57 · 1006 阅读 · 0 评论 -
使用返回指针的函数查找最大数
//使用返回指针的函数查找最大数#includeint *findmin(int *a,int n){ int *min=a,i; for(i=0;i<n;i++) { if(a[i]<*min) *min=a[i]; } return min;}void main(){ int a[]={6,5,8,2,9,14,22,17}; int b=0,*min;原创 2015-09-29 14:49:51 · 586 阅读 · 0 评论 -
使用指针实现字符串的匹配
/*使用指针实现字符串的匹配--C语言的编程之道*/#include#includeint match(char* B,char* A){ int i,j,start=0; int lastB=strlen(B)-1; int lastA=strlen(A)-1; int endmatch=lastA; //就下面的代码重要 for(j=0;endmatch<=原创 2015-09-29 13:57:05 · 1526 阅读 · 0 评论 -
用指向函数的指针比较大小
/*用指向函数的指针比较大小#includemin(int a,int b){ if(a<b) return a; else return b;}void main(){ int (*pim)();//(*p)()表示定义一个指向函数的指针变量,它用来存放函数的入口地址 int a,b,m; pim=min;//将函数地址赋给它,它就指向那个函数。 print原创 2015-09-29 14:49:03 · 1462 阅读 · 0 评论