![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C 初阶笔记
变女侠吧
这个作者很懒,什么都没留下…
展开
-
链表
链表#include "node.h"int main(int argc,char const *argv[]){ Node *head=NULL;//定义一个Node的指针,叫做head,一开始等于NULL,一开始没有任何东西 int number; do{ scanf("%d",&number); if(number!=-1...原创 2020-02-29 21:53:18 · 122 阅读 · 0 评论 -
可变数组
1.Resizable ArrayThink about a set of functions that provide a mechanism od resizable array of int①Growable②Get the current size③Access to the elements2.The InterfaceArray array_creat(int init_s...原创 2020-02-29 15:15:03 · 169 阅读 · 0 评论 -
位运算例子,位段
位运算例子1,输出一个数的二进制int main(){ int number; scanf("%d",&number); unsigned mask=1u<<31; for(;mask;mask>>=1){ printf("%d", number&mask?1:0); } printf("...原创 2020-02-28 22:44:17 · 284 阅读 · 0 评论 -
移位运算
移位运算1.左移<<i<<ji中所有的位向左移动j个位置,而右边填入0如:10100101 <<2 A510010100 得 94所有小于int的类型,移位以int的方式来做,结果是intx<<=1 等价于 x*=2x<<=n 等价于x*=(2的n次方)int main(){ unsigne...原创 2020-02-28 20:06:55 · 168 阅读 · 0 评论 -
按位运算
按位运算C有这些按位运算的运算符:&按位的与|按位的或~按位取反^按位的异或<<左移右移1.按位与&(x)i1并且(y)i1,那么(x&y)i=1否则的话(x&y)=0两个整数按位与,如果对应的位上,比如x的第i位和y的第i位都是1,的话,与的结果就是1,否则是0如:01011010 16进制的5A1000110...原创 2020-02-28 19:36:33 · 124 阅读 · 0 评论 -
二进制文件
二进制文件1.其实所有的文件最终都是二进制的文本文件无非是用最简单的方式可以读写的文件more、tailcatvi而二进制文件是需要专门的程序来读写的文件文本文件的输入输出是格式化,可能经过转码2.文本VS二进制Unix喜欢用文本文件来做数据存储和程序配置交互式终端的出现使得人们喜欢用文本和计算机talkUnix的shell提供了一些读写文本的小程序Windows喜欢用二进...原创 2020-02-28 17:51:00 · 1360 阅读 · 2 评论 -
文件输入输出
文件输入输出1.可用>和<做重定向2.FILEFILEfopen(const char restrict path,const char* restrict mode);int fclose(FILE* stream);fscanf(FILE*,……)fprintf(FILE*,……)打开文件的标准代码:FILE* fp=fopen(“file”,“r”);//FIL...原创 2020-02-28 13:49:00 · 78 阅读 · 0 评论 -
格式化输入输出
格式化输入输出1.printf%[flags][width][prec][hIL]typescanf%[flag]typeflag(标志) 含义- 左对齐+ 在前面放+或-(space) 正数留空0 0填充int main(){ printf("%9d\n",123)...原创 2020-02-27 18:41:30 · 502 阅读 · 2 评论 -
声明
1.变量的声明int i;是变量的定义extern int i;是变量的声明main.c中:#include "max.h"int main(){ int a=5; int b=6; printf("%f\n",max(a,gALL));//需要声明,在项目的某处有gALL这样一个全局变量 return 0;}max.c中:#include "m...原创 2020-02-27 16:52:49 · 154 阅读 · 0 评论 -
头文件
1.头文件把函数原型放到一个头文件(以.h结尾)中,在需要调用这个函数的源代码文件(.c文件)中#include这个头文件,就能让编译器在编译的时候知道函数的原型例:函数原型在max.h中,max函数在max.c中在main.c和max.c中,均要包含头文件 #include “max.h”头文件就像一个桥梁,也可以说是一个合同,它是max提供给别人的一个合同,承诺我的max长这个样...原创 2020-02-27 16:15:51 · 486 阅读 · 0 评论 -
多个源代码文件
1.多个.c文件main()里的代码太长了适合分成几个函数一个源代码文件太长了适合分成几个文件两个独立的源代码文件不能编译形成可执行的程序需要在集成开发环境(IDE)中新建一个项目,然后把几个源代码文件加入进去对于项目,IDE的编译会把一个项目中所有的源代码文件都编译后,链接起来有的IDE有分开的编译和构建两个按钮,前者是对单个源代码文件编译,后者是对整个项目做链接编译单元:一个....原创 2020-02-27 13:56:03 · 379 阅读 · 0 评论 -
带参数的宏
1.带参数的宏像函数的宏#define cube(x) ((x)(x)(x))宏可以带参数#define cube(x) ((x)*(x)*(x))int main(){ printf("%d\n",cube(5));//125 return 0;}#define cube(x) ((x)*(x)*(x))int main(){ int i; ...原创 2020-02-27 13:52:51 · 415 阅读 · 0 评论 -
编译预处理指令
1.编译预处理指令#开头的是编译预处理指令它们不是C语言的成分,但是C语言程序离不开它们#define用来定义一个宏#define PI 3.14159//定义一个符号,这样定义出来的符号叫做一个宏,PI是这个宏的名字,而3,14159是这个宏的值//C语言在编译之前先做预处理,在预处理时,把所有的PI都替换成3.14159int main(){ printf("%f\n",...原创 2020-02-27 12:32:06 · 5263 阅读 · 0 评论 -
全局变量
1.全局变量定义在函数外面的变量是全局变量全局变量具有全局的生存期和作用域它们与任何函数都无关在任何函数内部都可以使用它们,它的作用域是大于所有的函数的int f(void);int gALL=12;//全局变量int main(int argc,char const *argv[]){ printf("in %s gALL=%d\n",_func_,gALL);//_fu...原创 2020-02-27 11:08:31 · 2416 阅读 · 0 评论 -
typedef、union
1.自定义数据类型(typedef)C语言提供了一个叫做typedef的功能来声明一个已有的数据类型的新名字,比如:typedef int Length;使得Length成为int类型的别名这样,Length这个名字就可以代替int出现在变量定义和参数声明的地方了:Length a,b,len;Length numbers[10];2.Typedef声明新的类型的名字新的名字是某...原创 2020-02-27 11:04:44 · 8093 阅读 · 4 评论 -
结构数组
1.结构数组struct time{ int hour; int minutes; int seconds;};struct time timeUpdate(struct time now);int main(void){ struct time testTimes[5]={ {11,59,59},{12,0,0},{1,29,59},{23,59...原创 2020-02-27 11:01:21 · 399 阅读 · 1 评论 -
结构指针
1.结构作为函数参数int numberOfDays(struct date d)整个结构可以作为参数的值传入函数这时候是在函数内新建一个结构变量,并复制调用这个结构的值也可以返回一个结构这与数组完全不同struct date{ int month; int day; int year;};bool isLeap(struct date d);//判断这一...原创 2020-02-27 10:56:54 · 147 阅读 · 0 评论 -
结构
1.声明结构类型int main(int argc,char const *argv[]){ struct date{//声明了一个结构类型 叫date,{}里面是这个结构的成员,也就是说将来的每一个date结构里,都会有以下三个成员 int month; int day; int year; };//初学者最常见的错误:漏了这个...原创 2020-02-27 10:53:01 · 106 阅读 · 1 评论 -
枚举
1.常量符号化用符号而不是具体的数字来表示程序中的数字提升可读性2.枚举用枚举而不是定义独立的const int变量枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明;enum 枚举类型名字{名字0,……,名字n};枚举类型名字通常并不真的使用,要的是在大括号里的名字,因为他们就是常量符号,它们的类型是int,值则依次从0到n,如:enum colors{red,ye...原创 2020-02-26 12:45:42 · 111 阅读 · 0 评论 -
字符串函数
字符串函数string.h:常用如下函数:strlenstrcmpstrcpystrcatstrchrstrstr使用字符串函数,需要#include <string.h>1.strlensize_t strlen(const char *s);返回s的字符串长度(不包括结尾的0),const是保证不会修改你的字符串int main(int argc,char...原创 2020-02-26 12:43:32 · 255 阅读 · 0 评论 -
putchar、getchar
1.putchar:int putchar(int c);向标准输出写一个字符返回写了几个字符,EOF(-1)表示写失败 end if file文件结束,是C定义的一个宏,每个宏都会有一个值,这个值是-12.getchar:int getchar(void);从标准输入读入一个字符返回类型是int是为了返回EOF(-1)Windows–>Ctrl-ZUnix–>Ct...原创 2020-02-26 12:35:12 · 93 阅读 · 0 评论 -
字符串数组
1.字符串数组char **aa是一个指针,这个指针指向另一个指针,那个指针指向一个字符(串),因此它不是我们要的字符串数组char a[][]a是一个二维数组的变量,,在二维数组定义当中,第二维一定是要有确切的大小,否则编译不会通过如:int main(){ char a[][]={ "Hello" };//|error: array type ha...原创 2020-02-26 12:33:25 · 119 阅读 · 0 评论 -
字符串输入输出
字符串输入输出1.字符串赋值?char* t=“tide”;char*s;s=t;并没有产生新的字符串,只是让指针s指向了t所指的字符串,对s的任何操作就是对t做的2.字符串输入输出char string[8];scanf("%s",string);printf("%s",string);scanf读入一个单词(到空格、tab或回车为止)int main(){ ch...原创 2020-02-26 12:30:47 · 743 阅读 · 0 评论 -
修改字符串
1.字符串变量char* s=“Hello world!”;int main(){ char* s="Hello world!"; s[0]='B'; printf("Here is=%c\n",s[0]);//编译没错,但是程序不会输出 return 0;}2.不知道为什么不输出,因此尝试以下代码:int main(){ int i=0;...原创 2020-02-26 12:28:14 · 320 阅读 · 0 评论 -
字符串变量
1.字符数组:char word[]={‘H’,‘e’,‘l’,‘l’,‘o’,’!’};这不是C语言的字符串,因为不能用字符串的方式做运算2.字符串char word[]={‘H’,‘e’,‘l’,‘l’,‘o’,’!’,’\0’};共7个单元,最后那个单元里放的是0,这个0就使得现在的这个word是一个字符串3.C中字符串对于C预言来说,字符串是以0(整数0)结尾的一串字符0或...原创 2020-02-26 12:25:28 · 834 阅读 · 0 评论 -
动态分配内存
动态分配内存1.输入数据如果输入数据时,先告诉你个数,然后再输入,要记录每个数据C99可以用变量做数组定义的大小,C99之前呢?使用动态内存分配:int a=(int)malloc(n*sizeof(int));用malloc需要#include <stdlib.h>int main(void){ int number; int* a; int ...原创 2020-02-25 11:51:34 · 93 阅读 · 0 评论 -
指针细节
1.1+1=2?int main(){ char ac[]={0,1,2,3,4,5,6,7,8,9}; char *p=ac; printf("p=%p\n",p);//p=0060FEFE printf("p+1=%p\n",p+1);//p+1=0060FEFF sizeof(char)=1 int ai[]={0,1,2,3,4,5,6,7,...原创 2020-02-25 11:49:02 · 96 阅读 · 0 评论 -
指针与const
1.指针与const指针可以是const,指针所指的那个变量也可以是const指针是const:表示一旦得到了某个变量的地址,不能再指向其他变量int* const q=&i这种情况,指针q是const,意思是说q的值不能被改变,q的值就是i的地址,q指向了i这个事实不能被改变,也就是q不能再指向别人了,它们之间的关系是永久的、在这之后通过q做一些访问如:*q=26,可以,...原创 2020-02-25 11:45:57 · 181 阅读 · 0 评论 -
指针和数组
如果传一个普通变量,那么参数接收到的是值如果传一个指针,那么参数接收到的也是值,只不过这个值是地址1.传入函数的数组成了什么?函数参数表中的数组实际上是指针sizeof(a)==sizeof(int*)但是可以用数组的运算符[]进行计算void minmax(int a[],int len,int *max,int *min);int main(void){ int a[...原创 2020-02-25 11:44:53 · 106 阅读 · 0 评论 -
指针应用场景
1.指针的应用场景一交换两个变量的值int swap(int *pa,int *pb){int t=*pa;*pa=*pb;*pb=t;}代码:void swap(int *pa,int *pb);int main(){ int a=5; int b=6; swap(&a,&b); printf("a=%d,b=%d\n",a,...原创 2020-02-25 11:42:39 · 809 阅读 · 0 评论 -
指针
1.指针就是保存地址的变量int ;int* p=&i;在这里表示p是一个指针,它指向的是一个int,现在将i的地址交给pp里的值是i这个变量的地址,因此说p指向了iint p,q;int p,q;可以靠近int,也可以远离int,靠近变量这两句意思相同,都表示p是一个指针变量,指向int,而q只是一个普通的int类型的变量因此也得出,并不是把加给了int,而是把加给了...原创 2020-02-25 11:39:02 · 83 阅读 · 0 评论 -
运算符&
1.运算符&scanf("%d",&i);里的&获得变量的地址,它的操作数必须是变量int i;printf("%x",&i);int main(){ int i=0; printf("%x\n",&i); //warning: format '%x' expects argument of type 'unsigned i...原创 2020-02-25 11:36:25 · 341 阅读 · 0 评论 -
二维数组
1.二维数组int a[3][5];通常理解为a是一个3行5列的矩阵a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]2.二维数组的遍历for(i=0;i<3;i++){...原创 2020-02-25 11:31:47 · 218 阅读 · 0 评论 -
构造素数表
1.判断素数判断是否能被已知的且<x的素数整除int isPrime(int x,int knownPrimes[],int numberofKnowPrimes);int main(){ //若想算出前100个素数 int prime[100]={2};//素数表,将来里面的每个元素都是素数,初始化为2,因为2,是我们已知的第一个素数 int count=1...原创 2020-02-24 17:16:39 · 256 阅读 · 0 评论 -
数组运算
数组运算1.写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束int main(){ const int number=10;//数组的大小 int x; int count[number];//count[0]代表0这个数字出现多少次,count[9]代表9这个数字出现多少次 定义数组 int i; f...原创 2020-02-24 17:14:53 · 284 阅读 · 0 评论 -
用数组输出大于平均数的数字
1.如何写一个程序计算用户输入的数字的平均数,并输出所有大于平均数的数?int main(){ int x; double sum=0.0; int cnt=0; int number[100]; //定义了一个新的变量number,这个变量是个数组,这个数组里的每一个单元都是一个int,这个数组的大小是100,即这个数组可以放100个int s...原创 2020-02-24 17:13:02 · 3170 阅读 · 0 评论 -
函数细节
函数其他细节1.函数没有参数时写成void f(void);明确告诉编译器,我的这个函数不接受任何参数而void f();参数表里不放任何东西,在传统C中,表示f函数的参数表未知,并不表示没有参数建议不要参数表中不放东西2.逗号运算符?在调用函数时,如f(a,b)圆括号里的逗号是标点符号,不是运算符,传了a和b两个参数进去但如果是f((a,b)),就表明要先做括号里的运算,这是就是逗...原创 2020-02-24 17:10:06 · 133 阅读 · 0 评论 -
调用函数、本地变量
1.调用函数如果函数有参数,调用参数时必须传递给它数量、类型正确的值可以传递给函数的值是表达式的结果,这包括:字面量变量函数的返回值计算的结果2.类型不匹配调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞编译器总是悄悄替你把类型转换好,但是这很可能不是你所期望的后续的语言C++/Java在这方面很严格void cheer(int i){ printf("c...原创 2020-02-24 17:08:52 · 231 阅读 · 0 评论 -
函数原型
1.函数先后关系void sum(int begin,int end){ int i; int sum=0; for(i=begin;i<=end;i++){ sum+=i; } printf("%d到%d的和是%d\n",begin,end,sum);}int main(){ sum(1,10); sum(2...原创 2020-02-24 17:04:38 · 285 阅读 · 0 评论 -
从函数中返回值
1.从函数中返回值如果你的函数要返回一个结果,那么你就需要用return把那个结果交给调用它的地方例一://素数求和int isPrime(int i)//idPrime有一个返回的类型,是int类型,这个isPrime会返回一个int的结果//所以要安排一个return语句,让它去返回一个int{ int ret=1; int k; for(k=2;k<...原创 2020-02-24 17:01:57 · 1537 阅读 · 1 评论