C语言基础加强
Qingzhuforever
这个作者很懒,什么都没留下…
展开
-
单字符输入输出
putcharint putchar(int c);向标准输入写一个字符返回写了几个字符,EOF(-1)表示写失败getcharint getchar(void);从标准输入读入一个字符返回类型是int是为了返回EOF(-1)Windows-->Ctrl-ZUnix-->Ctrl-D#include<stdio.h>int main(void){ int...转载 2018-03-29 17:31:17 · 442 阅读 · 1 评论 -
编译预处理和宏:带参数的宏
像函数的宏#define cube(x) ((x)(x)(x))宏可以带参数#include<stdio.h>#define cube(x) ((x)*(x)*(x))int main(){ int i; scanf("%d".&i); printf("%d\n",cube(i));//替换成 printf("%d\n",((i...转载 2018-04-16 20:58:04 · 500 阅读 · 0 评论 -
大程序结构:多个源代码文件
多个.c文件main()里的代码太长了适合分成几个函数一个源代码文件太长了适合分成几个文件两个独立的源代码文件不能编译形成可执行的程序项目在DEV C++中新建一个项目,然后把几个源代码文件加入进去对于项目,DEV C++的编译会把一个项目所有的源代码文件都编译后,链接起来有的IDE有分开的编译和建构两个按钮,前者是对单个源代码文件编译,后者是对整个项目做链接...转载 2018-04-16 21:45:56 · 1933 阅读 · 0 评论 -
大程序文件:头文件
头文件把函数原型放到一个头文件(以.h结尾)中,在需要调用这个函数的源代码文件(.c文件)中#include这个头文件,就能让编译器在编译的时候知道函数的原型“”还是<>#include有两种形式来指出要插入的文件 “”要求编译器首先在当前目录(.c文件所在的目录)寻找这个文件,如果没有,到编译器指定的目录去找<>让编译器只在指定的目录去找编译器...转载 2018-04-16 22:18:43 · 256 阅读 · 0 评论 -
全局变量:后记 全局变量贴士
* 返回指针的函数返回本地变量的地址是危险的返回全局变量或静态本地变量的地址是安全的返回在函数内malloc的内存是安全的,但是容易造成问题最好的做法是返回传入的指针//返回本地变量的地址是危险的#include<stdio.h>int *f(void);void g(void);int main(){ int *p = f(); printf("*p=%d\n",*...转载 2018-04-11 22:11:48 · 367 阅读 · 0 评论 -
编译预处理与宏:宏定义
编译预处理指令#开头的是编译预处理指令它们不是C语言的成分,但是C语言程序离不开它们#define用来定义一个宏#define#define <名字><值>注意没有结尾的分号,因为不是C的语句名字必须是一个单词,值可以是各种东西在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值完全的文本替换gcc --save-temps宏如果一个宏的值中有其他的...转载 2018-04-11 22:47:20 · 522 阅读 · 0 评论 -
大程序结构:声明
#main.c#include<stdio.h>#include "max.h"int main(void){ int a=5; int b=6; printf("%f\n".max(a,gAll)); return 0;} #max.cint gAll = 12;double max(double a,double b){...转载 2018-04-17 21:46:56 · 214 阅读 · 0 评论 -
链表
可变数组的缺陷issuesAllocate new memory each time it inflates is an easy and clean way.But It takes times to copy ,and may fail in memory restricted situation Linked blocksno copy 链表...转载 2018-04-22 23:16:59 · 172 阅读 · 0 评论 -
文件:格式化输入输出
格式化的输入输出printf %[flags][width][.prec][hlL]typescanf %[flag]type%[flags][width][.prec][hlL]type Flag 含义 - 左对齐 + 在前面放+或- (space) 正数留空 0 0填充 width或pre...转载 2018-04-19 10:44:24 · 721 阅读 · 0 评论 -
文件:文件输入和输出
文件输入输出用 > 和 < 做重定向FILEFILE* fopen(const char * restrict path,const char * restrict mode);int fclose(FILE *stream);fscanf(FILE*,…)fprintf(FILE*,…)打开文件的标准代码FILE* fp =fopen("fi...转载 2018-04-19 11:14:13 · 282 阅读 · 0 评论 -
二进制文件
二进制文件其实所有的文件最终都是二进制的文本文件无非是用最简单的方式可以读写的文件 more,tailcatvi而二进制文件是需要专门的程序来读写的文件文本文件的输入输出是格式化,可能经过转码文本 VS 二进制Unix喜欢用文本文件来做数据存储和程序配置 交互式终端的出现使得人们喜欢用文本和计算机“talk”Unix的shell提供了一些读写文本的小程序Wi...转载 2018-04-19 21:43:27 · 512 阅读 · 0 评论 -
位运算:按位运算
按位运算C有这些按位运算的运算符 & 按位的与| 按位的或~ 按位取反^ 按位的异或<< 左移>> 右移按位与 &如果(x)i ==1 并且 (y)i ==1,那么(x&y)i =1否则的话(x&y)i = 0按位与常用于两种应用: 让某一位或某些位为0:x & 0xFE取一个数中的一段:x ...转载 2018-04-20 21:12:35 · 469 阅读 · 0 评论 -
位运算:移位运算
左移 <<i << ji 中所有的位向左移动j个位置,而右边填入0所有小于int的类型,移位以int的方式来做,结果是intx << = 1 等价于 x *= 2x <<= n 等价于 x *= 2的n次右移 >>i >> ji中所有的位向右移j位所有小于int的类型,移位以int的方式来...转载 2018-04-20 21:30:03 · 286 阅读 · 0 评论 -
位运算:位运算例子
输出一个数的二进制#include<stdio.h>int main(){ int number; scanf("%d",&number); unsigned mask = 1u<<31; for(;mask;mask>>=1){ printf("%d",number & mask?1:...转载 2018-04-21 20:52:31 · 520 阅读 · 0 评论 -
位运算:位段
位段把一个int的若干位组合成一个结构struct { unsigned int leading:3; unsigned int FLAG1:1; unsigned int FLAG2:1; int trailing:11;};#include<stdio.h>void ptrBin(unsigned int number)...转载 2018-04-21 21:09:55 · 362 阅读 · 0 评论 -
全局变量:静态本地变量
静态本地变量在本地变量定义时加上static修饰符就成为静态本地变量当函数离开的时候,静态本地变量会继续存在并保持其值静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值#include<stdio.h>int f(void);int gAll = 12;int main(){ f(); f(); f(); return 0;} i...转载 2018-04-10 21:53:23 · 259 阅读 · 0 评论 -
全局变量
全局变量定义在函数外面的变量是全局变量全局变量具有全局的生存期和作用域它们与任何函数都无关在任何函数内部都可使用它们int f(viod);int gAll = 12;int main(){ printf("in main gAll=%d\n",gAll); f(); printf("agin in main gAll=%d\n",gAll); return 0;}int ...转载 2018-04-10 21:16:11 · 278 阅读 · 0 评论 -
字符串函数
string.h中strlen的STRCMP的strcpystrcat的,和strchr的strstrstrlen的size_t strlen(const char * s);˚F返回小号的字符串长度(不包括结尾的0)的#include <stdio.h>中的#include <string.h>的size_t mylen(const char * s){ ...转载 2018-03-29 21:06:11 · 199 阅读 · 0 评论 -
枚举
常量符号化用符号而不是具体的数字来表示程序中的数字#include<stdio.h>const int red = 0;const int yellow = 1;const int green = 2;int main(int argc,char const *argv[]){ int color = -1; char *colorName = N...转载 2018-03-29 23:03:55 · 214 阅读 · 0 评论 -
结构类型
声明结构类型#include<stdio.h>int main(int argc,char const *argv[]){ struct date{ int month; int day; int year; };//注意!!! struct date today; tod...转载 2018-03-30 21:50:51 · 272 阅读 · 0 评论 -
结构与函数
结构作为函数参数int numberOfDays(struct date d);整个结构可以作为参数的值传入函数这时候是在函数内新建一个结构变量,并复制调用者的结构的值也可以返回一个结构这与数组完全不同#include<stdio.h>#include<stdbool.h>struct date{ int month; int day; int...转载 2018-04-01 20:52:06 · 1578 阅读 · 0 评论 -
指针与const
指针是const表示一旦得到了某个变量的地址,不能在指向别的其他变量。int * const q = &i; //q是const指针不可修改*q = 26;//OKq++; //ERROR所指是const表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)const int *p = &i;*p=26;//error!(*p)是const通过指针不可修改i...转载 2018-03-26 21:27:20 · 99 阅读 · 0 评论 -
指针运算
#include<stdio.h>int main(){ char ac[]={0,1,2,3,4,5,6,7,8,9,}; char *p = ac; char *p1= &ac[5]; printf("p =%p\n",p); printf("p+1=%p\n",p+1); printf("p1-p=%d\n",...转载 2018-03-26 22:34:47 · 352 阅读 · 0 评论 -
结构中的结构
结构数组struct date dates[100];struct date dates[]={ {4,5,2005},{2,4,2005}};#include<stdio.h>struct time{ int hour; int minutes; int seconds;};struct time timeUpdate(struct t...转载 2018-04-09 21:21:08 · 464 阅读 · 0 评论 -
联合:类型定义
自定义数据类型(typedef)C语言提供了一个叫做typedef的功能来声明一个已有的数据类型的新名字。比如: typedef int Length; 使得 Length 成为 int 类型的别名这样,Length这个名字就可以代替int 出现在变量定义和参数声明的地方了: Length a,b,len; Length nu...转载 2018-04-09 21:44:37 · 556 阅读 · 0 评论 -
动态内存分配
输入数据如果输入数据时,先告诉你个数,然后再输入,要记录每个数据C99可以用变量做数组定义的大小,C99之前呢?int *a = (int*)malloc(n*sizeof(int));#include<stdio.h>#include<stdlib.h>int main(void){ int number; printf("输入数量:");...转载 2018-03-27 13:20:14 · 145 阅读 · 0 评论 -
字符串
char word[]={'H','e','l','l','o','!'}; //字符数组char word[]={'H','e','l','l','o','!','\0'}; //字符串字符串以0(数字0)结尾的一串字符0或'\0'是一样的,但是和'0'不同0标志字符串的结束,但是它不是字符串的一部分计算字符串长度的时候不包含这个0字符串以数组的形式存在,以数组或指针的形式访问更多的是...转载 2018-03-27 20:53:09 · 103 阅读 · 0 评论 -
字符串常量
字符串常量char* s = "Hello,world!";#include<stdio.h>int main(void){ int i=0; char* s = "Hello World"; char* s2 = "Hello World"; //s[0]='B';//erro:不能写,只能读 printf("&i=%p\...转载 2018-03-27 21:59:45 · 297 阅读 · 0 评论 -
字符串输入与输出
字符串赋值?char *t = "title";char *s;s = t;并没有产生新的字符串,只是让指针s指向了t所指的字符串,对s的任何操作就是对t做的字符串输入输出char string[8];scanf("%s",string);printf("%s",string);scanf读到一个单词(到空格/tab /或回车为止)scanf是不安全的,因为不知道要读入的内容的长度下述代码翁凯老师...转载 2018-03-28 10:00:42 · 1327 阅读 · 0 评论 -
字符串数组,以及程序参数
字符串数组char **a;a是一个指针,指向另一个指针,那个指针指向一个字符(串)char a[][]chey程序参数int main(int argc,char const * argv[])argv[0]是命令本身当使用Unix的符号链接时,反映符号链接的名字当使用Unix的符号链接时,反映符号链接的名字...转载 2018-03-28 10:48:22 · 652 阅读 · 0 评论 -
联合:联合
联合存储所有的成员共享一个空间同一时间只有一个成员是有效的union的大小是其最大的成员初始化对第一个成员做初始化//union 的用处#include<stdio.h>typedef union{ int i; char ch[sizeof(int)];}CHI;int main(){ CHI chi; int i; chi.i = 1234;//ox04D2...转载 2018-04-10 20:40:32 · 231 阅读 · 0 评论 -
可变数组
Resizable ArrayThink about a set of functions that provide a mechanism of resizable array of int.GrowableGet the current sizeAccess to the elementsthe InterfaceArray array_create(int in...转载 2018-04-21 22:12:01 · 552 阅读 · 0 评论