
c语言
Mormont
暂无简述
展开
-
c语言中的局部变量与全局变量
我们知道函数中的形参变量只有被调用的时候才分配内存单元,调用结束立即释放。这说明形参变量只有在函数内部才有效,离开函数就不能使用了。这种变量的有效性范围叫做变量的作用域。c语言中的变量按作用域范围可以分为局部变量和全局变量两种。1.局部变量变量在函数内部定义,则变量具有从定义位置开始到函数结束为止的局部作用域。如果变量在某个复合语句内定义,变量具有从定义位置开始到复合语句结束为止的局部作用原创 2016-11-03 16:44:36 · 1758 阅读 · 0 评论 -
指针与数组
我们知道当定义一个变量后,系统会为这个变量分配内存空间,那么变量名就是这个空间的名字,这个空间可以保存值,这个空间有地址。如:int num = 5;这是一个整型变量,系统为这个变量分配了内存空间,num就是就是这个内存空间的名字,5就是保存在这个空间里的值,这个空间有地址。num++:就是num对应的空间里的值加1,即5+1。int *p = #这是定义了一个指针变量原创 2016-11-15 14:04:01 · 486 阅读 · 0 评论 -
malloc() ralloc() calloc()
1.malloc()(1)函数原型void *malloc(unsigned int num_bytes);(2)功能请求系统动态分配num_bytes个字节的空间,如果分配成功则返回第一个字节的地址,并且可以进行强制类型转换,告诉系统分配空间中存储的是那种类型的数据。否则返回空指针NULL。(3)当内存不在使用时,要用使用free函数将内存释放。2.rallo原创 2016-11-14 19:33:55 · 568 阅读 · 0 评论 -
野指针
所谓野指针就是没有进行初始化的指针,系统会默认随机对其进行初始化,当我们调用这个指针的时候就会发生内存泄露,造成段错误。所以我们要尽量避免野指针。如何避免野指针呢?1.我们要有良好的编码习惯,当指针不确定指向时,将指针初始化为NULL。char *ptr =NULL;NULL //#define NULL (void *) 0NULL是内存零地址,而且不能对零地址对应的内原创 2016-11-13 21:18:10 · 340 阅读 · 0 评论 -
c语言中i++与++i的区别及运行效率
在c语言我们会经常把i++与++i弄混淆。i++ 是先使用,再自加(其自加是在遇到结束标志时才会进行)即a = i;i=i+1;++i 是先自加,再使用即 i=i+1; a= i;例如以下程序:#include int main(){int i = 2;int num;num = (++i)+(++i)+(++i)+(++i);print原创 2016-11-11 19:39:29 · 16376 阅读 · 10 评论 -
scanf函数中的格式字符串及注意事项
scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf函数的一般形式为: scanf(“格式控制字符串”, 地址表列);格式字符串的一般形式为:%[*][输入数据宽度][长度]类型。其中有方括号[]的项为任选项。其各项意义为:1.类型:表示输入数据的类型 d原创 2016-11-09 17:37:39 · 8039 阅读 · 2 评论 -
格式化输入与输出
在c语言的学习中,永远少不了两个函数,那就是scanf 和 printf 函数。scanf 其功能是按指定的格式从键盘读入数据,存入地址表指定存储单元中,并按回车键结束。其格式为:scanf(“格式控制串”,地址表) scanf(“%d”,&num);地址表:就是变量的地址,常用取地址运算符&。scanf是一个行缓冲格式输入函数,当我们遇到这样的情况,int n原创 2016-11-07 15:08:51 · 1744 阅读 · 0 评论 -
枚举与define的区别和volatile关键字的作用
1.枚举与define的区别:(1)从处理过程的角度看:#define宏是由编译预处理器在预编译处理时处理的,而且只做简单的字符串的替换。枚举常量则是在编译的时候确定其值的。(2)从调试的角度看:通常情况下,在编译器里,可以调试枚举常量,而不能调试宏常量。(3)从数据的类型看:#define可以编译任意类型的常量,而枚举只能是定义整型常量。(4)从代码编写角度看:枚原创 2016-12-01 22:11:47 · 1029 阅读 · 0 评论 -
内敛函数inline
函数的引入可以减少程序的目标代码,实现程序代码的共享。函数调用需要时间和空间开销,调用函数实际上将程序执行流程转移到被调函数中,被调函数的代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护好现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但对于一些函数体代码很短,又被频繁调用的函数,就不能忽视这种开销。这个时候就需原创 2016-11-30 16:55:45 · 854 阅读 · 1 评论 -
有关字符串的几个函数
1.strlen 测量字符串的长度#include #define N 100int my_strlen(char *str){ int count = 0; while(*str != '\0') { count++;str++; } return count;}int main()原创 2016-11-16 18:53:47 · 518 阅读 · 0 评论 -
数组指针
数组指针的定义:void main(){int a[2][2] = {1,2,3,4};int (*p)[2];p = a;}上述代码中p就是一个数组指针变量,它指向一个数组。那么我们需要做的就是要弄明白数组名与数组指针变量之间的关系。我们来想一下,a,a[0],a[1],p,a+1,a[0]+1,p+1都代表什么含义。(1)a:a是一个数组名,类型是指向一维数原创 2016-11-17 18:33:06 · 613 阅读 · 0 评论 -
数据类型与定义
数据类型就是数据集合的划分,不同数据类型对CPU的意义是不一样的。在c语言中我们对不同的数据类型进行了划分。对于我们来说,要学会编程首先我们需要学会的就是定义变量,这是最基本的东西,但是就是这些最基本的东西我们往往会忽略其重要性。这是一家公司的面试题:1.用变量 a 给出下面的定义a) 一个整型数(An integer)b)一个指向整型数的指针( A pointer原创 2016-10-31 13:23:18 · 1656 阅读 · 0 评论 -
位操作运算符
1.按位与运算符:按位与运算符“&”是双目运算符。其功能是参与运算的两个数字对应的二进制位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。例如,9&5可写算式如下:00001001(9的二进制补码)&00000101(5的二进制补码)00000001 (1的二进制补码)0000 10010000 01010000 0001 = 1原创 2016-11-06 19:56:20 · 987 阅读 · 0 评论 -
字节长度与数据溢出
字节长度就是一个变量所占的内存空间的大小。数据有着不同的数据类型,不同的数据类型会分配不同的空间大小。在c语言中有字节,半字,字三种存储数据的单位,其关系是1个字=4个字节=32位,一个半字=2两个字节=16位,一个字节=8位。int 4 字节 char 1字节short原创 2016-11-05 20:59:30 · 1975 阅读 · 0 评论 -
编译预处理
我们知道在编译过程中的预处理阶段会进行头文件展开,宏替换以及条件编译。1.头文件展开:首先是头文件展开,头文件的前面都有#符号,其实是理指令。理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令:原创 2016-11-23 22:34:56 · 606 阅读 · 0 评论 -
可变参函数
C语言编程中有时会遇到一些参数个数可变的函数,例如,printf( )函数的函数原型为int printf( const char* format, ...); 它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式。printf("%d",i); printf("%s",s); printf("th原创 2016-11-22 20:45:26 · 356 阅读 · 0 评论 -
函数指针与函数数组指针
1.函数指针:函数指针就是指向函数的指针可以作为函数的形参,能够提高代码的扩展性。在这里我们需要知道回调函数:回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。回调函数的应用是非常广泛的。通常,当我们想通过一个统原创 2016-11-21 22:26:50 · 356 阅读 · 0 评论 -
c语言中的几个关键字
1.register:请求编译器尽可能的将变量存放在cpu的寄存器中。用register关键字可以省去cpu从内存中提出数据的时间,提高程序的执行效率。但是由于cpu中的寄存器是有限的,所以不可能将所有的变量都放在cpu中,所以我们把经常访问的变量用register修饰。注意事项:(1)register只能修饰局部变量,不能修饰全局变量和函数。(2)register修饰的变量不原创 2016-11-20 19:20:14 · 1497 阅读 · 0 评论 -
数组与指针的区别及函数的调用
1.数组与指针的区别:(1)空间分配指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。而数组是静态分配空间,在全局变量区或者栈上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。(2)访问效率指针是通过地址间接访问,而数组是直接访问数值。因此指针的访问原创 2016-11-19 19:08:21 · 1050 阅读 · 0 评论 -
typedef与#define的区别
1.typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。2. #define是预处理指令。在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: typedef int INTEGER; 这以后就可用INTEGER来代替int作原创 2016-11-29 17:23:07 · 581 阅读 · 0 评论