![](https://img-blog.csdnimg.cn/edcd5ec5404842858d7c63546c55d73d.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
C语言学习笔记
0-1背包
主要分享本人的C/C++、python、数据结构等学习笔记,希望跟大家一起学习,一起进步。在专栏中查看更加方便。
展开
-
不借助第三方变量进行两个值交换
void swap1(int* a, int* b){ int temp = 0; temp = *a; *a = *b; *b = temp;}//不引用第三方变量的交换会出现bug,当自身和自身交换,会变成0void swap2(int* a, int* b){ *a = *a + *b; *b = *a - *b; *a = *a - *b;}void swap3(int* a, int* b){ *a = *a ^ *b; *b = *a ^ *b; *a = *原创 2021-11-04 20:57:58 · 67 阅读 · 0 评论 -
哈希(hash)
1、哈希 Hash(散列):哈希函数等于散列函数,哈希是一种存储方法,还是一种排序方法,只要算法中用到哈希思想,就可以叫hash算法。将数据自身的值和最终的存储位置形成一个特定关系 这个关系叫做hash函数:ex:y(存储位置)=f(x(关键值key))顺序表:节点之间,物理相邻,逻辑也相邻链表:节点之间,物理可能不相邻,逻辑相邻哈希表:节点之间,节点地址与被存储数据之间存在逻辑关系。2、如何构造哈希(6种)3、如何解决哈希冲突(主要是连地址法)1、开放地址法2、再散列函数法3、链地原创 2021-10-21 12:44:27 · 686 阅读 · 0 评论 -
4、fork()复制进程
1、fork复制进程进程:2、父进程子进程stu@stu-virtual-machine:~/Test/Forkex$ vi fork1.cstu@stu-virtual-machine:~/Test/Forkex$ gcc -o fork1 fork1.cstu@stu-virtual-machine:~/Test/Forkex$ ./fork1s=parent,ppid=4067,pid=4390s=child,ppid=4390,pid=4391s=parent,ppid=4067原创 2021-10-17 13:18:26 · 98 阅读 · 0 评论 -
5、main函数参数
1、argc 参数个数 argv参数名称 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(int argc,char*argv[],char*envp[])//参数个数,参数内容,环境变 量 4 { 5 printf("argc=%d\n",argc); 6 for(int i=0;i<argc;i++) 7 { 8 printf("argv[原创 2021-10-16 23:36:48 · 112 阅读 · 0 评论 -
C语言文件
基本的文件操作只有“w”和“a”才能创建文件1、C语言操作文件三步:1、打开文件2、读写文件3、关闭文件个人理解,文件指针实质上时一个结构体指针,里面包含多个成员变量#include <stdio.h>int main(){ int ar[] = { 12,23,34,45,56,78,89,90 }; int n = sizeof(ar) / sizeof(ar[0]); FILE* fp = NULL;//定义文件流指针 errno_t tag = NULL;//原创 2021-10-07 11:44:54 · 122 阅读 · 0 评论 -
C语言重点题目
1、结构体对齐规则:1、结构体变量的首地址,必须是结构体变量中“最大基本数据类型成员所占字节数”的整数倍。2、结构体变量中每个成员相对于结构体首地址的偏移量,都是该成员基本数据类型所占字节数的整数倍。3、结构体变量的总大小,为结构体变量中“最大基本数据类型所占字节数”的整数倍。2、使用宏定义,进行结构体成员相对偏移量的计算。#define sum(type,exp) (int)&(((struct type*)0)->exp)/*将0强转为结构体类型指针,此时零就是首地址,然后引用原创 2021-10-07 11:39:31 · 158 阅读 · 0 评论 -
九、双链表
头文件:typedef int Elemtype;//链表的头节点的pre指向尾节点,尾节点的next指向头节点//如果只有一个头节点,则让头节点的next和pre都指向本身typedef struct DuLinkNode{ struct DuLinkNode* prev; struct DuLinkNode* next; Elemtype data;}DuLinkNode,*PDuLinkNode;typedef struct DuLinkList{ PDuLinkNode he.原创 2021-09-15 21:23:01 · 49 阅读 · 0 评论 -
简单的链表实现
只能释放malloc…申请的指针typedef:给类型起别名带头节点的单链表typedef int Elemtype;typedef struct Linknode{ Elemtype data; struct Linknode* next;}Linknode;//节点typedef struct Linklist{ struct Linknode* head;//头指针。 int cusize;}Linklist;//链表struct Linknode* buy_node(原创 2021-09-15 21:19:15 · 46 阅读 · 0 评论 -
2021-07-16 跳转语句break、continue、goto:、return
1、breakbreak语句只能在switch语句和循环语句中使用,用来跳出switch语句或者循环语句,然后执行switch语句或者循环语句后面的语句。ex:switch(money/10){//break起跳出switch语句的作用case 0:printf("你好穷");break;case 10000:printf("有点小钱");break;case 20000:printf("还不错");break;case 30000:case 40000:printf("很不错了");br原创 2021-07-18 16:32:29 · 241 阅读 · 0 评论 -
利用两个for循环打印出乘法口诀
1、首先,这是我们常见的乘法口诀表利用两个变量来控制口诀表的行和列,操作如下:#include<stdio.h>int main(){ for(int i =1;i<=9;i++)//控制行数 { for(int j=1;j<=9;j++)//控制列数 { if(j>=i) printf("%d*%d=%d\t",i,j,i*j); if(j==9) printf("\n"); } }}结果:...原创 2021-07-15 23:50:00 · 210 阅读 · 0 评论 -
7-22指针类型、大小端存放
指针类型对指针的影响普通类型数字之间可以相互转换,但指针不能随意转换。1、影响指针加一即p+1可解释为p+sizeof(datatpe)如:int ar[10]={};intp=ar;//把ar首元素的地址给指针p则p+1=a[1];p+1就加了四个字节,因为int具有四字节,同理char一字节,double8字节…2、影响指针对内存的解析能力int main(){ int a = 0x12345678; int* ip = &a; short* sp原创 2021-07-23 00:00:33 · 70 阅读 · 0 评论 -
内存拷贝函数
1、基本原理将连续存储的变量,一个字节,一个字节的拷贝,这里会用到char类型指针只能解析一个字节内容的特点来进行拷贝。话不多说,直接上代码:void my_momcpy(void * dest,void *src,size_t const){assert(dest!=nullptr&&src!=nullptr);//断言目标数组和原变量不为空char*dp=(char*)dest;char*sp=(char*)src;//将两个无类型指针强转为char类型for(int i原创 2021-07-26 10:47:41 · 294 阅读 · 0 评论 -
输入一个整型数,显示它的位数,并将其顺序输出,逆序输出
1、首先输入一个整型数字,显示他的位数基本思想:对其进行整除10的运算对其不断整除10,直到个位数时继续整除将会得到0,此时变会得到约束条件,具体操作如下:(只有函数本身,需要运行的可自己调用)int Get_figure(int x)//获取输入数字位数函数{ int i = 0; while (x > 0) { x /= 10;//对x进行整除运算然后再赋值给x i++; } return i;运行结果如下:2、对输入的数字进行顺序输出基本思想,例如12对其顺原创 2021-07-15 11:30:17 · 4972 阅读 · 0 评论 -
结构体、联合体
一、结构体1、结构体类型设计c语言提供了基本数据类型,比如char,bool,short int,int ,long int,long long,float,double,long double都称为内置数据类型。程序员可以用结构体来封装一些属性。结构体举例struct student//struct用来声明这是结构体类型,而student就是类型名,或结构体名。{//里面存放的数据可以是基本数据类型,也可以是其他结构体类型,可以进行嵌套char s_name[10];char s_id[1原创 2021-08-18 23:39:59 · 185 阅读 · 0 评论 -
2021-07-18数组
1、一维数组注意点:1)数组类型由数组内的元素决定。数组的大小也又数组内的元素决定。一个字节有八位。bool size is 1short int size is 2int size is 4long int size is 4long long size is 8float size is 4double size is 8long double size is 82)数组定义必须有类型名,数组名,数组数量;而且数组的原创 2021-07-18 21:27:50 · 367 阅读 · 0 评论 -
2021-07-29 二级指针、数组指针、二维数组
二级指针s**int a1=10,a2=11,a3=12;int *p1=&a1,*p2=&a2,*p3=&a3;int **s=&p1;//声明s为二级指针,里面存放的是p1的地址![在这里插入图片描述](https://img-blog.csdnimg.cn/4c4161cc70c246e8b454576e46357364.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,te原创 2021-07-29 22:02:19 · 48 阅读 · 0 评论 -
const修饰指针、指针加减
一、几种常见的const修饰指针1、指针所指之物,不能改变const int *p=&a;int const*p =&a;/*以上两种写法其实都是一样的,const在*p左边,表示*p不能改变即不能给*p再进行赋值*/ex://*p=100;错误//p=&b;正确2、指针本身不能改变int *const p=&a;/*const 在指针p的坐边,则指针本身不能进行改变,即不能给p进行赋值*/ex://p=&b;错误//*p=100;正确二原创 2021-07-28 16:45:22 · 186 阅读 · 0 评论 -
六、C语言概述 static关键字 extern 关键字
1、static关键字1)当static修饰局部变量时可延长其寿命,不会改变其作用域#include<stdio.h>void fun(){ for(int i = 10; i>0;i--){ int a = i ;//此处没有用static关键字修饰,所以调用函数时会给a在栈区开辟一个四字节的空间,循环体每执行一次,都会对a进行改变 int b = 0; a++; b++; printf(" %d %d\n",a,b); }} int main(){ f原创 2021-07-11 17:12:48 · 72 阅读 · 0 评论 -
五结构体、typedef关键字
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-07-11 16:38:11 · 190 阅读 · 0 评论 -
2021-06-29四、C语言概述
1、运算符优先级=*和+或-a* = b-c;上述代码,a=a*(b-c)而并不是a=a*b-c;2、三目运算符语句?语句:语句举例:if(a>b){max =a;}else{nax =b;}//用三目运算符表示max =(a>b)?a:b;即,符合限定条件执行第一个语句,不符合则执行第二个;3、指针指针在32位(X86)系统中占4位指针在64位系统中占8位(1byte=8bit)int *p= &a;//*是声明p是指针变量,把a的地址给p原创 2021-06-29 12:27:25 · 48 阅读 · 0 评论 -
三、C语言概述
1)函数通过函数可以把一个任务分为若干个小任务。#include<stdio.h>#include<math.h>int main(){float a =0,b = 0,c = 0,p = 0,s = 0;scanf("%s %s %s",&a,&b,&c);if(a+b<=c || a+c<=b || b+c<=a){return -1;}float p = (a+b+c)/2.0float s = sqrt(p*(p原创 2021-06-25 00:15:07 · 57 阅读 · 0 评论 -
2021-06-21二、C语言概述
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-06-23 18:12:30 · 43 阅读 · 0 评论 -
2021-06-17一、C语言概述
上课笔记1、数制转换()原创 2021-06-18 14:18:34 · 70 阅读 · 0 评论