C语言
文章平均质量分 52
cany1000
码农。无所谓,像蜗牛一点一点爬。
展开
-
动态内存分配
1. malloc,calloc,realloc的对比函数名函数原型功能返回值malloc- 动态内存分配void *malloc(size_t size);向系统申请分配size个字节大小的内存空间。如果分配成功,返回指向被分配内存的指针calloc- 动态内存分配并清零void *calloc(size_t n,siz原创 2016-01-25 21:13:24 · 917 阅读 · 2 评论 -
野指针
什么是野指针?什么情况会造成野指针?1. 野指针通常是因为指针变量中保存的值不是一个合法的内存地址而造成的。2. 野指针不是NULL指针,是指向不可用内存的指针。3. NULL指针不容易用错,因为一个if语句可以很好的判断一个指针是不是NULL。注:C语言中没有任何手段可以判断一个指针是否是野指针。野指针的由来:1)局部指针变量没有初始化#include #inclu原创 2016-01-26 20:50:33 · 324 阅读 · 0 评论 -
数组和逗号表达式
注意数组里面的{ }, ( ) 和 ,逗号表达式的值是:先计算前面的表达式,后计算后面的表达式。表达式最终的值是最后一个表达式的值。举例1:int main(){ int a[3][2]={{0,1},(2,3),(4,5)}; int *p; p=a[1]; printf("%d\n",p[0]);//3 printf("%d\n",p[1]);//5 printf原创 2016-03-18 20:23:12 · 1757 阅读 · 0 评论 -
指针数组和数组指针
不多说废话,先看一个例子:int main(){ char *arr[2] = {"one","two"}; printf("arr[0] = %s\n",arr[0]); printf("*(arr+0) = %s\n",*arr); printf("arr[1] = %s\n",arr[1]); printf("*(arr+1) = %s\n",*(arr+1)); cha原创 2016-03-16 14:43:23 · 612 阅读 · 0 评论 -
文件的打开和关闭
1)文件:存储在外部介质(磁盘)上的相关数据的集合。2)文件的分类: a. 从用户的角度:特殊文件(标准输入输出文件)和普通文件(磁盘文件)。 b. 操作系统:每一个与主机相连的输入、输出设备看作是一个文件。 输入文件:终端键盘; 输出文件:显示屏和打印机 c. 数组的组织形式:ASCII码文件(文本文件)和二进制文件 ASCII文件:每一个字节原创 2016-01-25 17:23:49 · 593 阅读 · 0 评论 -
文件的读写操作
1. 读写字符函数fgetc(),fputc()int fgetc(FILE *stream);将流指针指向的文件中的一个字符输出。若文件指针指到文件尾,会遇到文件结束标志EOF(-1),我们可以通过检查该函数的返回值是否是-1来判断是否已读到文件尾。int fputc(int ch,FILE *stream);将字符变量ch的值写到流指针指定的文件中去,若是stdout是标准输出(显示原创 2016-01-28 20:49:37 · 615 阅读 · 0 评论 -
文件的定位
1、文件中有一个位置指针,用于确定当前读写的位置。 当读/写一个文件时,每读/写完一个字符,该指针自动移向下一个字符位置。2、文件指针移到文件头的函数rewind()格式:void rewind(FILE *stream);功能:使stream所指定文件的位置指针重新返回文件的开头。无返回值例1:读a.txt文件,第一次将读到的内容显示在屏幕上,将第二次读到的内容复制到原创 2016-05-01 17:34:13 · 581 阅读 · 0 评论 -
文件操作(汇总)
1. 首先讲述一个小技巧,查找MSDN库的方法,点击关键字,按F1键,会自动打开在线帮助系统。 当然你也可以离线下载好之后再用。2. 文件的打开和关闭: fopen()函数 和 fclose()函数 FILE *fopen(const char *filename, const char *mode);参数:filename --- 文件名 (file name)原创 2016-02-15 15:30:57 · 452 阅读 · 0 评论 -
C - 关键字const和volatile
const:只读的变量,必须在定义时进行初始化。volatile:不作编译器的优化,每次直接去内存中取值。当一个变量,没有被用作左值,而多次取值的情况下,通常编译器会进行优化。看个例子:int num = 10;int a = num; //(1)int b = num; //(2)上面(1)(2)句中num没有被用作左值,这个时候编译器会认为i的值没有发生改变,所以在原创 2016-03-14 14:38:53 · 349 阅读 · 1 评论 -
预处理
1. 预处理就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。 预处理命令可以划分为宏,文件包含,条件编译3个大类。2.在C语言源程序中,允许用一个标识符来表示一个字符串,成为“宏”。被定义为宏的标识符称为宏名。 在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏替换或宏展开。3. 在C语言中,#include被称为文件原创 2016-03-14 14:15:06 · 347 阅读 · 0 评论 -
while和switch
每一个C语言的文件或者函数都可以单独编译,但只有main函数的才可以执行。C语言用函数实现软件的模块化设计。switch看例子吧#include "stdafx.h"#include #include using namespace std;int main(){ int n1=0,n2=0,n3=0; char ch; while((ch=getchar())!=原创 2016-02-26 14:58:22 · 1417 阅读 · 2 评论 -
for循环的三个表达式
首先我们我来一段代码,看看它有什么错误:for(i = 0,printf("First = %d\t",i); i < 5,printf("Second = %d\t",i); i++,printf("Third = %d\t",i)){ printf("Fourth = %d\n",i);}有没有感觉for循环里面的表达式好复杂,但是语句绝对没有错误,编译没有错误,但是运行呢?原创 2016-03-15 20:42:07 · 20927 阅读 · 1 评论 -
fscanf(),fprintf()
1、fscanf( )---- 类似于scanf,scanf是从标准输入流中读取格式化的内容到一个变量中。---- fscanf( )是从指定的文件流中读取格式化的内容到一个变量中。2、fprintf( )---- printf( ),是将格式化的内容输出到标准输出流中,并在屏幕上打印出来。---- fprintf( ),是将格式化的内容输出到文件流(文件指针)中,必须是写方式原创 2016-11-04 20:53:00 · 497 阅读 · 0 评论 -
C语言 gets()和scanf()函数的区别
scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。char string[15]; gets(string); /*遇到回车认为输入结束*/scanf("%s",string); /*遇到原创 2016-10-04 10:38:36 · 867 阅读 · 1 评论 -
sprintf(),strcpy(),memcpy()
1、sprintf()字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。头文件:stdio.hsprintf原型: int sprintf( char *buffer, const char *format, [ argument] … );参数列表buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。原创 2016-10-18 17:08:07 · 476 阅读 · 0 评论 -
VC包含目录、附加依赖项、库目录及具体设置
包含目录:#include 中headerfile.h的搜索目录。如果有XXX.h找不到,设置这个目录可以解决。附加依赖项:C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码。所以,要使用一个库,除了要include他的头文件以外,还要在链接过程中把lib加进去。这个就是在附转载 2017-02-22 20:22:39 · 1026 阅读 · 0 评论 -
C错题练习
1、strlen#include using namespace std;int main(){ char p[]={'a','b','c'},q[10]={'a','b','c'}; printf("%d %d\n",strlen(p),strlen(q));//由于p数组中没有字符串结束符,长度不能确定,q数组中字符串长度为3 for(int i=0;i<10;i++) {原创 2016-09-09 12:42:07 · 445 阅读 · 0 评论 -
指针变量的运算
指针变量的运算有三种:赋值运算、关系运算与算术运算。1. 指针变量赋值运算就是将变量的地址赋给指针变量2. 指针变量的算术运算指针变量的算术运算主要有指针变量的自加、自减、加n和减n操作。(1)指针变量自加运算指令格式:++;指针变量自加运算并不是将指针变量值加1的运算,而是将指针变量指向下一个元素的运算。当计算机执行 ++ 指令后,指针变量实际增加值为指针变量类型字节原创 2016-02-26 20:45:44 · 4028 阅读 · 0 评论 -
'\0','0',"0" ,0之间的区别
请对照ASCII字符集表,便于理解。1. '\0': 单引号表示字符,是C/C++语言中的字符串结束标志,在ASCII字符集中对应数字0,字符缩写是NULL,表示空字符。2. '0': 也是字符,且是字符常量。对应的ASCII码十进制是48,十六进制是0x30。可用于数字转化为字符,2+‘0’->'2'3. “0”: 双引号是字符串,并且是字符串常量。4. 0: 数字0,和‘0’的原创 2016-01-28 17:13:23 · 2949 阅读 · 0 评论 -
枚举(enum)
enum 枚举类型 {枚举值1名=数值,...,枚举值n名=数值};这里先提一下关键字和标识符的区别:关键字:编译器自己预定的,具备固定含义的保留字,在程序中不能作为一般的标识符使用。 例如:int ,double,if,for,while等,在代码中一般用蓝色进行标注。标识符:在程序中出现的变量名,常量名,类名,对象名,函数名等统称为标识符。原创 2016-02-06 16:40:17 · 777 阅读 · 0 评论 -
格式化输出--%m.n
①%:表示格式说明的起始符号,不可缺少。②-:有 - 表示左对齐输出,右边补空格,如省略表示右对齐输出,左边补空格。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度, 用于说明输出的实型数的小数位数。 未指定n时,浮点型默认的精度为n=6位。格式字符格式字符用以指定输出项的数据类原创 2016-03-07 15:14:55 · 5590 阅读 · 0 评论 -
宏定义和函数
1. 函数调用时: 1) 要先把实参表达式的值求出来在赋给实参。 2) 函数的参数必须是有类型的,如int,float,char等等。2. 带参数的宏替换时: 1)实参表达式中的值不作计算直接的替换。 2)参数是无类型的。来看一个例子吧:#include #include using namespace std;#define Q(x)原创 2016-03-14 13:33:50 · 628 阅读 · 0 评论 -
分配概念和转义字符
总结了一下常用的转义字符:输出结果 字符串中的字符Tab键 ---------- \t " ---------- \" \ ---------- \\ ? ---------- \? \n ----------原创 2016-03-07 20:54:20 · 339 阅读 · 0 评论 -
main()函数
C语言提供了一个很特殊的函数--main()函数。作用是:“统领”其他的自定义函数,其他函数都必须在它的控制下才能使用。main()函数的声明有几种形式://无返回值无参数void main();//无返回值有参数void main(int argc,char *argv[]);//有返回值无参数int main();//有返回值有参数int main(int argc,原创 2016-02-25 20:00:54 · 722 阅读 · 0 评论 -
预处理命令
1. 以#开头的预处理命令预处理命令可以控制编译器在进行编译链接之前,对所写的代码进行一些其他的处理。所谓的预处理就是在编译之前对程序的处理,所以预处理命令也叫做预编译命令。C语言的编译器,主要完成两个作用:1)如果程序中有预处理命令,就根据预处理命令对程序做一些前期的处理,否则什么都不做。2)对经过预处理的程序进行编译生成计算机可以识别的二进制文件。生成可执行程序的过程如原创 2016-02-25 21:13:33 · 900 阅读 · 0 评论 -
数组和指针
输出二位数组的元素和地址#include "stdafx.h"#include #include using namespace std;int main(){ int num[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}}; int i,j; printf("[0x%x]:num=0x%x\n\n",num,*num); for(i=0;原创 2016-02-26 12:34:20 · 301 阅读 · 0 评论 -
字符串中的宏替换
#define (X) 8printf("1234567890 X");程序会输出 :1234567890 X 在字符串中的宏定义会被视为普通字符串如果想输出 :1234567890 8需要这样编写程序printf("1234567890 "#X" "); 即可## 是连接符号,连接两个字符串#是把名字代替成参数中的字符串 #d转载 2017-04-05 15:36:00 · 9935 阅读 · 0 评论