![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
刘星燎
弱小和无知不是生产的障碍,傲慢才是
展开
-
统计程序运行时间
这里以测试nop运行时间为例#include <stdio.h>#include <time.h>int main(){ int i = 0; clock_t start, end; double sec; start = clock(); for(i = 0; i < 10000000; i++) { asm("nop");原创 2020-07-31 10:08:15 · 389 阅读 · 0 评论 -
全局变量和局部变量同名
在c语言中,变量有全局变量和局部变量之分,这一点和很多高级语言类似,如c#,java等。不过与c#,java中的局部变量如在全局变量作用域内则不允许与全局变量名相同,而c语言是允许这样做的。这样的做法极不提倡,但是c语言既然允许这么做,就分析一下其变量名相同时在不同位置调用该变量名时所实际调用的是哪个变量值。#include <stdio.h>//全局变量//作用域:从定义开始到文件结束//默认初始值为0int c = 1;//当在调用变量时有多个同名变量起作用...转载 2020-06-05 11:18:56 · 5210 阅读 · 0 评论 -
【C语言】C语言中赋值语句规则
赋值语句是由赋值表达式再加上分号构成的表达式语句。 其一般形式为: 变量=表达式;在赋值语句的使用中需要注意以下几点: 由于在赋值符“=”右边的表达式也可以又是一个赋值表达式, 因此,下述形式 变量=(变量=表达式); 是成立的,从而形成嵌套的情形。 其展开之后的一般形式为:变量=变量=…=表达式; 例如: a=b=c=d=e=5; 按照赋值运算符的右接合性,因此实际上等效于原创 2017-04-09 20:30:24 · 49280 阅读 · 1 评论 -
【C语言】C语言中for、while和do while 比较
for和while的比较 其实这两个可以互相代替的,比如说for (int i = 0; i<10; i++){ ...//插入语句 } 用while来写就是int i = 0;while (i<10) { ...//插入语句 i++;} 1、从上可以看出for循环比较简洁,会比while更常用些,循环次数已知的情况下,尤其是用使用指针的时候,很方便原创 2017-04-09 20:25:07 · 1571 阅读 · 0 评论 -
【C语言】判断质数
原理: 素数(质数)的定义是只能被1和他本身整除,1不是素数(质数)。因此要判断一个数是否为素数.就要判断它能不能被比他小的所有素数整除。 这里给出的是一个更快速的方法。要判断一个数是否为素数,只要判断比它开根号后的数小的数能否把它整除。原因如下: 一个数N,它是根号N的平方,那么如果它有其他约数的话,假设为A,B(约数肯定要成对出现的)必然有一个大于根号N,另一个小于根号N原创 2017-04-09 20:13:27 · 1076 阅读 · 2 评论 -
【C语言】判断闰年
原理: 能被4整除且不能被100整除,或者能被400整除。 判断能否被整除用%取余运算,结果为0则表示可以。原创 2017-04-09 19:58:38 · 873 阅读 · 0 评论 -
【C语言】判断三角形形状
【C语言】判断三角形形状原创 2017-04-09 16:33:11 · 15258 阅读 · 0 评论 -
【C语言】将一数组元素复制到另一个数组中
原创 2017-04-09 15:35:46 · 18772 阅读 · 1 评论 -
【C语言】编程习惯小提示(一)
编程习惯小提示(一) 1.使用#include指令避免重复声明。 即将所有的函数声明都放到一个头文件里面。 2.使用#define指令给常量值取名。 即将所有的常量名都放到一个头文件里面。 3.在#include文件中放置函数原型。 即将函数原型放到独立的头文件里面或功能相似的头文件。用的时候调用 4.始终要进行检查,确保数组不越界。原创 2017-04-10 23:42:24 · 367 阅读 · 0 评论 -
【C语言】操作符描述,示例,优先级
文章摘至《C和指针》 Kenneth A.Reek 著 徐波 译原创 2017-04-10 23:50:47 · 394 阅读 · 0 评论 -
【C语言】统计一个数中1的个数(移位操作符)
移位操作符介绍: == 移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。== 位移位运算符分为【>>】 右移和【<<】 左移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。 移位时,移出的位数全部丢弃,移出的空位补入的数与左移还是右移花接木有关。 如果是左移,则规定补入的数全部是0; 如果是右移,还与被移位的数据是否带符号原创 2017-04-11 00:03:01 · 2882 阅读 · 0 评论 -
【C语言】一道结合顺序的问题
下面这个程序的结果是什么呢?#include<stdio.h>int func( void ){ static int counter = 1; return ++counter; } void main(){ int answer; answer = func() - func() * func(); printf( "%d", answer );}这是原创 2017-04-11 00:06:55 · 631 阅读 · 0 评论 -
【C语言】一个关于if的小问题
代码一:#include<stdio.h>void main(){ int a = 20; if( 1 <= a <= 10 ) printf("aaa"); else printf("vvv");}运行结果: 代码二:#include<stdio.h>void main(){ int a = 20; if( 10 >=原创 2017-04-11 00:11:29 · 270 阅读 · 0 评论 -
【C语言】优先级和求值顺序
文章摘至《C和指针》 Kenneth A.Reek 著 徐波 译原创 2017-04-11 00:15:00 · 923 阅读 · 1 评论 -
【C语言】C语言运算符的优先级和结合性一览表
C语言的运算符众多,具有不同的优先级和结合性,我们将它们全部列了出来,方便大家对比和记忆:转载 2017-04-11 23:38:28 · 345 阅读 · 0 评论 -
【C语言】*++p,*p++,++*p,++*++p,++*p++
部分运算符优先级和结合方向表 首先我们在优先级及结合方向表中可以看到++运算符和*运算符是同属于一级的,且结合方向都是从右到左现在我们可以对下面的问题进行解释: 下面p都是指针。*++p 首先p的内存地址先自加一(++p先加后用),然后再进行解引用运算。*p++ 先进行解引用(p++先用后加),返回值以后再进行地址加1再进行解引用。++*p 先进行解引用,然后将值加1,不是地址加原创 2017-04-12 00:10:47 · 1736 阅读 · 1 评论 -
【C语言】指针小总结
无论是程序员还是计算机都无法通过值的位模式来判断它的类型,类型是通过值的使用方法隐式的确定的。 声明一个指针变量不会自动分配任何内存 在对指针执行间接访问前,指针必须进行初始化或者使它指向现有的内存,或者给它分配动态内存。 除了NULL指针之外,再也没有任何内建的记法来表示指针常量。 偶尔需要使用指针常量,这时我们可以通过把一个整型值强制转换为指针类型原创 2017-04-12 00:16:32 · 187 阅读 · 0 评论 -
【C语言】类型转换原则
类型转换原则原创 2017-04-17 22:12:19 · 495 阅读 · 0 评论 -
【C语言】逗号表达式
逗号运算符的优先级是级别最低的,结合性自左向右,最后一个表达式的值是整个逗号表达式的最终值。 注意要关注逗号表达式中的表达式。#include <stdio.h>void main(){ int i,j; int a,b; a = 10, b = 10, j = 10; i = ( j++, j+100, 999 + j ); //先计算j++得到j=1原创 2017-04-17 22:50:07 · 701 阅读 · 0 评论 -
【C语言】指针和数组
关于C语言中指针和数组的争论就像是一场恶战。一方面,有些人觉得,所有人都必须承认指针与数组是不同的。而另一些人则认为数组被当成指针来处理,因此它们不应该有什么区别。这种现象让人迷惑。然而,这两种说法其实都是正确的。 数组不是指针,指针也不能说是数组。在C语言中,指针仅在内存中代表一个地址,而数组是许多连续的内存块,多个类型相似的元素存储在其中。数组表示法vs指针表示法 数组被当作指针来处理,具体转载 2017-04-12 00:44:59 · 272 阅读 · 0 评论 -
【C语言】常用的转义字符及其含义
常用的转义字符及其含义转载 2017-04-16 22:43:35 · 2076 阅读 · 0 评论 -
【C语言】Dev-C++ 调试方法简明图文教程
1.把“生成调试信息”设置为 Yes。方法如下: Tools(工具) –> Compiler Options(编译器选项) –> Settings(设置)2.编译程序。3.设置断点(Break point) 把光标移动到您想暂停执行的那一行,按 ctrl + F5,或者直接用鼠标点击下图红线标明的区域。4.开始调试(Debug) 按 F8 开始调试。如果您没有把“生成调试信息”设置为转载 2017-04-16 23:20:59 · 10304 阅读 · 0 评论 -
【C语言】指针总结
指针总结:转载 2017-05-02 22:33:19 · 181 阅读 · 0 评论 -
【C语言】字节对齐和边界对齐
一、什么是字节对齐 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。二、对齐的作用和原因 各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址转载 2017-04-21 00:39:12 · 4631 阅读 · 0 评论 -
【C语言】空语句的作用(还需日后增加)
1.起到延时的作用for(i=0;i<255;i++) for(j=0;j<255;j++);2.为了程序的结构清楚,可读性好3.以后扩充新功能方便。先将函数名写上,随后再添加。4.对于某些大型的软件项目,特别是一些嵌入式项目,处于自动化测试的需要,要求必须进行语句(例如,if/else语句)的配对。 在进行代码静态解析,单体测试Case抽出的时候,为了保证全路径覆盖,很多专业原创 2017-04-22 21:26:30 · 12040 阅读 · 0 评论 -
【C语言】流程图符号及流程图
流程图符号及流程图: http://www.360doc.com/content/17/0422/21/20519152_647717105.shtml转载 2017-04-22 21:39:53 · 19244 阅读 · 0 评论 -
【C语言】指针运算—— 算术运算,关系运算
算术运算 是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。(乘法,除法就不可以) 指针加上一个整数的结果是另一个指针。问题是,它指向哪里?如果你将一个字符指针加1,运算结果**产生的指针指向内存中的下一个字符。**float占据的内存空间不止1个字节,如果你将一个指向float的指针加1,将会发原创 2017-04-24 07:33:22 · 6988 阅读 · 2 评论 -
【C语言】左值与右值
左值就是“=”号左边的变量或表达式,是一个确切的,具有实际空间的存储地址,右值是一个数据,因此左值不能是一个字面值。按字面意思,通俗地说。 就是以赋值符号 = 为界,= 左边的就是左值,= 右边就是右值。 比如: (1) int b = 3; (2) int a = b;第(2)行代码,a为左值,b为右值。更深一层 可以将 L-value 的 L, 理解成 Location转载 2017-04-25 23:28:20 · 1072 阅读 · 0 评论 -
【C语言】getchar单个字符依次输入(可对单个字符进行处理)
【Getchar知识点】1.从缓冲区读走一个字符,相当于清除缓冲区2.前面的scanf()在读取输入时会在缓冲区中留下一个字符’\n’(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误3.getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)g原创 2017-04-25 23:42:03 · 15266 阅读 · 0 评论 -
【C语言】头文件的作用
1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数;2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的情况下,只要修改头文件的内容,程序就可以做相应的修改,不用亲自跑到繁琐的代码内去搜索。3,头文件只是声明,不占内存空间,要知道其执行过程,要看你头文件所申明的函数是在哪个.c文件里定义的,才知道。4,他并不是C自带的,可以不用。5,调用了头文件,就等于赋予了调用某些函数的权限原创 2017-04-25 23:45:39 · 450 阅读 · 0 评论 -
【C语言】ABACADACAB编程问题
解题一: #include<stdio.h> void f(int k) { char a[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; if(k>=1) {f(k-1);原创 2017-04-25 23:48:47 · 457 阅读 · 0 评论 -
【C语言】C语言中3种作用域举例
/**************************************************** 头文件声明----------------------------------------------------*/#include<stdio.h>/****************************************************原创 2017-04-25 23:51:13 · 1659 阅读 · 0 评论 -
【C语言】(windows.h)MessageBox函数
【示例】首先调用Windows.h这个头文件 #include<windows.h>接下来我们调用messageboxMessageBox(0, "你好", "helloworld", 0); //第一个参数设置为0,第一个参数是依赖的窗口的编号,相当于谁弹出的窗口,0为系统弹出,第二个参数是对话框的内容,第三个参数是对话框的标题,第四个参数是对话框类型,设置成0即可(运行效果如下所示,弹出一原创 2017-04-25 23:58:25 · 3005 阅读 · 0 评论 -
【C语言】(windows.h)ShellExecute函数
【SHELL EXECUTE参数说明】ShellExecute是Windows系统里面进行操作的一个函数 ( 例如 )打开一个网站:ShellExecute(0, "open", "https://user.qzone.qq.com/82810424",0, 0, 1);将第三个参数替换成想打开的网站就可以打开一个文件ShellExecute(0,"open", "D:\\1.txt", 0, 0原创 2017-04-26 00:05:25 · 3872 阅读 · 0 评论 -
【C语言】scanf返回值问题
如:scanf("%d,%d", &a,&b);如果a和b都被成功读入,那么scanf的返回值就是2如果只有a被成功读入,返回值为1如果a和b都未被成功读入,返回值为0如果遇到错误或遇到end of file,返回值为EOF。且返回值为int型.例:使用scanf函数输入数据。原创 2017-04-26 00:10:11 · 1048 阅读 · 0 评论 -
【C语言】预处理(部分内容未整理)
预处理器的主要作用就是: 把通过预处理的内建功能对一个资源进行等价替换 最常见的预处理有: 文件包含,条件编译、布局控制和宏替换4种。文件包含: #include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。 条件编译: #if,#ifndef,#ifdef,#endif,#undef等也是比较常见的预处理,主要是进行编译时进行有选择的挑选,原创 2017-05-16 22:41:26 · 311 阅读 · 0 评论 -
【C语言】变量数据交换方法
通过不同的方法对变量进行数据交换,下面是4种方法: 前三种的共同有点是他们要比第四种节省空间,比如在嵌入式中内存比较小,会用到前3种方法 在前三种方法中前两种又容易产生溢出,所以都数据有范围要求 第三种用到的是位运算种的异或,先将两个数相互异或,再进行一次异或即可还原,注意还原时候的顺序#include<stdio.h>void method_1(int x, int y原创 2017-05-19 00:01:55 · 1185 阅读 · 0 评论 -
【C语言】for语句
1、循环语句可以让一组语句反复多次执行2、for关键字可以用来编写循环3、for循环里可以让一个变量依次代表一组数字,然后使用一组语句处理这个变量代表的每个数字4、这个变量叫做循环变量5、采用如下格式描述循环变量的变化过程 for(把开始数字赋值给循环变量; 用逻辑表达式表示循环变量在变化过程中和结束数字的关系; 循环变量每次变化的规律) 6、如果一个问题可以采用一组数字的变化过程描述并且这组数原创 2017-07-08 11:35:44 · 1205 阅读 · 0 评论 -
【C语言】二维数组
二维数组原创 2017-07-10 22:47:29 · 868 阅读 · 0 评论 -
【C语言】操作符
操作符原创 2017-07-10 23:03:00 · 278 阅读 · 0 评论