![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
学习笔记
CAFE~BABE
认真的完成每一件事情
展开
-
【编译链接执行详解】底层干货——从程序员写下代码到执行到底发生了什么?
底层干货——从程序员写下代码到执行到底发生了什么?这一章呢,是属于了解编译器的后台做了什么。为什么在记事本中无法把我们写下的代码运行起来,但是在编译器中却可以呢?下面我们就来看看吧!综述为什么我们写下的一串串英文字符居然可以就像一个软件一样,双击两下就可以运行?为什么在记事本中无法把我们写下的代码运行起来,但是在编译器中却可以?这就不得不说这些代码经历了什么了,要想人前出名,必得经历千锤百炼之后,在适合的时机之时,方可大方光芒。这代码也是这样,它先是在编译环境中呆上了七七四十九天。在这期间原创 2021-10-10 20:11:59 · 745 阅读 · 0 评论 -
(超详细)一起来学C语言——文件
文章目录C语言之文件文件的分类文件的名字数据文件的分类二进制文件文本文件数据在内存中是怎么存储的?文件指针文件的打开和关闭fopen函数打开方式:‘w'fclose函数具体使用文件的顺序读写fputs函数(单个数据写到文件中去)fgets函数(从文件中读单个数据)fputs(将字符串写入到输出流)fgets(从输入流中读入数据)fprintf函数(按照格式化输出)fscanf(按照格式化输入)fwrite(以二进制的形式输出)fread(以二进制的形式输入)fwrite,fread,fseek函数的联合使用原创 2021-10-05 13:49:19 · 345 阅读 · 0 评论 -
【一起来学C】动态内存分配
动态内存分配前言:如果可以随意的开辟内存,随用随开,这样是不是就可以使内存的使用更加高效化呢?就不会出现开辟多了用不完,开辟少了不会用的情况了。动态内存开辟就解决了这一问题。开辟的位置内存中大致可以分为3个位置:栈区:存放局部变量和函数形参静态区:存放静态变量和全局变量堆区:动态开辟的变量我们今天研究的动态内存就存放再堆区中malloc介绍函数原型头文件stdlib.h或malloc.hvoid* malloc(sizze_t num);num代表字节数,malloc将nu原创 2021-09-26 18:38:56 · 199 阅读 · 5 评论 -
【一起来学C】自定义类型——结构体,枚举,联合
自定义类型:结构体,枚举,联合在C语言中,不但有着int,float,char,double,short这样的已经定义好的类型,还有着可以自己定义的类型,下面我们就一起来看一看吧。结构体的声明//struct是结构体关键字struct tag//tag是结构体标签{ member-list;//是成员列表}variable-list;//是结构体变量列表具体的例子:struct book{ char name[10]; char tuthor[10];}b1,b2;//创建了两原创 2021-09-24 09:03:50 · 217 阅读 · 0 评论 -
【一起来学C】C语言字符串+内存函数详解
字符串前言:C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的.字符串通常放在 常量字符串中或者字符数组中。字符串常量 适用于那些对它不做修改的字符串函数.strlenstrlen是一个求字符串长度的函数,遇到\0后停止函数原型size_t strlen(const char* );注意:返回值是size_t,size_t就是无符号整型strlen里面存放的是字符指针类型遇到\0就停止,长度不包含\0使用形式:int main(){ //字符指原创 2021-09-22 18:39:39 · 237 阅读 · 0 评论 -
判断一个数是不是素数
/*思路:素数:即质数,除了1和自己之外,再没有其他的约数,则该数据为素数,具体方式如下*/ //方法一:试除法int main(){ int i = 0; int count = 0; // 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始 for(i=101; i<=200; i++) { //判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数 int j = 0; fo转载 2021-07-14 19:04:32 · 130 阅读 · 1 评论 -
C语言分支循环之switch,case
case后语句的规范这样写是不对的,报错了说case后面不是常量表达式,因为里面含有n这个变量。所以case后面不能含n可以改成这个样子:这是一种常用的方法,就是在switch那里除十原创 2021-07-12 21:11:12 · 137 阅读 · 0 评论 -
C语言之内存和指针
内存内存是由无数个内存单元组成的。每个内存单元都有它独自的编号。那么,编号是怎么产生的呢?对于32位机器,就有32跟地址线那么通电的时候就会产生2的32次方个不同的信号组合,所以就会把每个内存单元赋予地址这里的每一个数字就对应着每个内存单元的编号计算机中的单位最小的单位是bit接着就是byte=8bitkb=1024bytemb=1024kbgb=1024mb...原创 2021-07-11 23:18:39 · 103 阅读 · 2 评论 -
计算机上的储存空间
大致可以分为一下几种:寄存器高速缓存内存硬盘 网盘越往上的数量越小,但是处理数据的速度越快当CPU从内存中读取数据的时候,CPU的速度过于快,内存拿出数据的速度没有CPU的快,所以,就设计了高速缓存和寄存器。寄存器的速度和CPU相当,所以CPU就从它这里拿取数据。同时高速缓存不断的给寄存器补充数据,内存也不断的给高速缓存补充数据。这样CPU的处理数据的速度就有很大的提高...原创 2021-07-10 16:54:05 · 94 阅读 · 0 评论 -
C语言常见关键字
总览常见的关键字有以下这些:typedef自己重命名已经有的关键字#include<stdio.h>typedef unsigned int u_int;int main(){ u_int a = 10; return 0;}上面这个就是把unsigned int自己重新命名为u_int原创 2021-07-10 16:45:00 · 212 阅读 · 0 评论 -
C语言操作符
条件操作符—— ?:他是一个三目操作符上面的逻辑就可以转换成条件操作符#include<stdio.h>int main(){ int a = 10; int b = 0; b = (a == 5) ? -6 : 6; printf("%d", b); return 0;}表达式1?表达式2:表达式3如果表达式1为真,那么就执行表达式2如果表达式1为假,那么就执行表达式33个表达式可以随意的加上括号逗号表达式格式:a,b,c从左到右依次计算最后的结果原创 2021-07-10 16:31:16 · 92 阅读 · 0 评论 -
C语言类型转换
隐形类型转换可以把低类型的值赋予高类型比如说:可以把int赋予double但是不可以将double的值赋予int强制类型转换如果非要把高类型的值赋予低类型,可以采取强制类型转换的模式格式为: 低类型 变量名a=(低类型)变量名b这过程中会造成精度损失...原创 2021-07-10 15:29:37 · 49 阅读 · 0 评论 -
作用域和声明周期
一、作用域局部变量:在它所在的括号内部一直有效全局变量:在整个工程中全部有效哦,在A文件中的,可以在B文件引用。在B中加上extern就行二、声明周期局部变量:和作用域一样,出了某个范围之后就没有用处了,它的只会被销毁全局变量:和整个程序的运行相同...原创 2021-07-07 23:18:12 · 105 阅读 · 0 评论 -
C语言之变量和常量
一、内存分布首先,常量放在全局变量区,变量放在栈区。虽然,变量和常量的名字可以相同,但是他们可是两个不同的事情啊。二、局部优先如果在main函数中同时出现了相同名称的变量名和常量名,那么局部有先#include<stdio.h>int a = 100;int main(void){ int a = 10; printf("%d", a); return 0;}但是#include<stdio.h>int a = 100;void test(){原创 2021-07-07 19:44:21 · 112 阅读 · 0 评论 -
计算机内部数字,字符存储
数字数字可以转成ASCII,不如说10000,那么它就占据5个字节,那么每一个数字都看作一个字符,每个字符都对应这一个数字,比如说‘1’吧,那么他就代表着49这个数字,存的时候就那么存。数字不转化成ASCII,就占有4个字节。下面就是例子:...原创 2021-04-27 00:20:39 · 249 阅读 · 0 评论 -
C语言文件之程序文件和数据文件
程序文件源文件——.c目标文件——windows下为.obj可执行文件——Windows 下为.exe数据文件文件名路径+文件名主干+文件名后缀C:\node(路径)\text(文件名).exe(文件名后缀)原创 2021-04-27 00:00:55 · 729 阅读 · 0 评论 -
计算机中的内存管理
计算机中的内存可分为3份栈区存放局部变量,函数形参,函数调用也开辟空间。堆区动态内存分配,malloc等静态区全局变量,静态变量。代码区储存函数的代码吧,好像是。原创 2021-03-16 23:10:46 · 85 阅读 · 0 评论 -
结构体传参的时候传参还是传址
传参的时候栈中会开辟大量的内存进行储存,所以最好是传址,只是传过去了地址而已,不占用大量的空间原创 2021-03-16 14:59:08 · 677 阅读 · 0 评论 -
怎么初始化嵌套的结构体和数组
我们知道,结构体和数组一样,在初始化的时候都是用大括号来进行初始化的。所以嵌套的也是一样。原创 2021-03-16 14:47:52 · 1106 阅读 · 0 评论 -
写一个函数求一个数的二进制补码中有多少个1(三种写法)
int count_one(int x){ int i = 0; int count = 0; for (i = 0; i < 32; i++) { if ((x>>i) & 1)//&是按位与,&&是逻辑与 count++; } return count;}int main(void){ int a = 0; scanf("%d", &a); int count = count_one(a); printf("原创 2021-02-26 09:44:39 · 265 阅读 · 1 评论 -
两个指针相减
特别特殊的点#include<stdio.h>int main(void){ int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; printf("%p\n", &arr[3]);//0x0135f9cc int* p = &arr[3]; printf("%p\n", p+1);//0x0135f9d0 printf("%d\n", *(p + 1));//5 printf("%p\n", &arr[4])原创 2021-02-25 20:35:35 · 1767 阅读 · 0 评论 -
指针类型的作用
1.决定了访问字节数的大小具体分析char只能访问1个字节的int可以访问4个字节的总结决定了走的长度原创 2021-02-25 19:35:18 · 476 阅读 · 1 评论 -
隐形转换(整形提升,算术转换)
整形提升为什么要整形提升2.整型提升具体分析char中永远存的是1个字节的,运算过程中一定要转为4个字节的。最重要的是printf那里:因为要打印4个字节的十进制整数,所以再次整型提升。这里容易忘记。整形提升实例1注意:比较也是运算,也需要整型提升整型提升实例2第二个相当于0+c,发生了运算算术转换...原创 2021-02-24 22:07:44 · 141 阅读 · 0 评论 -
C语言之逻辑之&&和||
逻辑与—&&1.前面为0,后面的就不算了结果是:1 2 3 4逻辑或—||前面的为1,后面的就不算了。就不放图了,跟上面是一样的。记住:前面为一就不算了,不再是0不算了。原创 2021-02-24 21:40:52 · 720 阅读 · 0 评论 -
sizeof
1.sizeof(表达式)#include<stdio.h>int main(void){ short a = 5; int s = 7; printf("%d\n", sizeof(a = s + 2)); printf("%d\n", a); printf("%d\n", sizeof(s=a+2)); printf("%d\n", s); return 0;}结果是:2 5 4 7结果说明:1.sizeof中的表达式不进行计算。!!!!2.由等号左边的内存原创 2021-02-23 20:07:19 · 271 阅读 · 0 评论 -
C语言学习过程中备忘的小点
1.存储一个变量的地址的时候用指针变量来储存。如:int*,float*,double*等等。原创 2021-02-23 19:27:10 · 65 阅读 · 0 评论 -
什么时候数组名不代表首元素地址
sizeof种单独出现数组名—表示整个数组字节数int arr[]={1,2,3,4};int sz=sizeof(arr)/sizeof(arr[0]);sizeof(arr)=16sizeof(arr[0])=4&+数组名—表示整个数组的地址!原创 2021-02-16 22:07:40 · 451 阅读 · 1 评论 -
函数传参之数组
函数传数组名时,代表的是首元素的地址。一定要注意啊,下面就是实锤拉:原创 2021-02-09 23:07:03 · 265 阅读 · 0 评论 -
求一个数的最大值的问题
初级阶段只考虑了整数没考虑负数结果是0,不对应该是-1才对。改正阶段这样就好了原创 2021-02-08 18:20:14 · 153 阅读 · 0 评论 -
if/while(i=a)a为一个常数
浅析if(i=a)a为常数for循环中:最开始i=0,进入到if判断中就变成i=5了,为真,进入if打印,接着执行i++,i变成了6,6<10,所以死循环的打印5原创 2021-02-07 19:03:25 · 243 阅读 · 0 评论 -
分支和循环之break和continue
不管是在while还是在for中,break和continue的作用是一样的break作用大,中制所用循环Continue作用小,只中制本次循环,continue后面的代码就不执行了。while中的break结果是1234while中的continue第一个结果是1234死循环第二个结果是1234678910for中的break结果是1234for中的continue结果是1234678910...原创 2021-02-03 11:40:54 · 105 阅读 · 1 评论 -
分支循环之switch
switch在之前上学的时候呢我就犯过许多错误,下面来一 一列举一下。case忘记加break这个可是十分重要的啊,要不然的话后面都输出了switch和case的选择都不能是浮点型不能是小数,只能是整数或者字符型case后必须是常量不能是变量比如说:int n=1;case n;这样就是不行的巧用default1.default放在哪里都行2.default后面也可以加break...原创 2021-02-02 11:49:10 · 261 阅读 · 1 评论 -
分支循环之悬空的else
是一个比较常出错的代码,主要是代码风格,并且else跟的是上面离他最近的if结果是什么也不输出原创 2021-02-02 11:18:07 · 235 阅读 · 1 评论 -
C语言字符串之strcpy
之前好像遇到过这样的问题,就是如何将一个字符串换为另一个字符串,这里的字符串一般是由数组构成的这里不能直接换,需要使用到strcpy这个函数进行替换。#include<string.h>int main(void){ char a[] = "sjdsdj"; strcpy(a, "dsd"); printf("%s", a); return 0;}就这样使用...原创 2021-02-02 10:54:46 · 209 阅读 · 1 评论 -
C语言之指针变量的大小
原创 2021-01-30 12:02:06 · 610 阅读 · 1 评论 -
static变量及其作用,C语言static变量详解
转载于:http://c.biancheng.net/view/301.html在 C 语言中,static 关键字不仅可以用来修饰变量,还可以用来修饰函数。在使用 static 关键字修饰变量时,我们称此变量为静态变量。静态变量的存储方式与全局变量一样,都是静态存储方式。但这里需要特别说明的是,静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态变量。例如,全局变量虽然属于静态存储方式,但并不是静态变量,它必须由 static 加以定义后才能成为静态全局变量。考虑到可能会有不少读者对静态转载 2021-01-29 12:35:26 · 511 阅读 · 2 评论 -
初始C语言之后置++和前置++
前置++和后置++对我来说是十分易错的错误点主要是存在于两个不同的变量的时候比如说这样的:b=a++;先b=a再a++那要是这样的呢:b=++a;先a++再b=a原创 2021-01-29 11:22:31 · 288 阅读 · 2 评论 -
C语言之自动关机的小程序
很有意思的一个代码#include<stdio.h>#include<string.h>#include<stdlib.h>#include<limits.h>int main(void){ char input[20]={0}; system("shutdown -s -t 120");again: printf("请输入:我是sb,否则你的电脑将在2分钟之内关机\n"); scanf("%s",input); if(strcmp(原创 2021-01-28 14:36:04 · 228 阅读 · 0 评论 -
C语言之统计一个数据出现的次数和异或的性质
之前在做这类问题的时候总想着要不要自己再创建一个数组,像一个跟屁虫一样记录着出现次数,现在一想完全没用。利用局部变量的知识就可以完全解决了上代码:#include<stdio.h>int main(void){ int a[] = { 1, 2, 3, 4, 5, 1, 2, 3, 4 }; int sz = sizeof(a) / sizeof(a[0]); int i = 0; int j = 0; for (i = 0; i < sz; i++) { in原创 2021-01-28 14:31:50 · 319 阅读 · 1 评论 -
初始C语言之转义符
\t\t是水平制表符,往后退好几个空格的符。\\可以消除转义字符的法力。\"和 \’这是为了打印输出单个 " 和 ’ 时好输出。不这样打是出不来这样的结果的暂且这么多,下回补充吧...原创 2021-01-26 19:06:07 · 608 阅读 · 1 评论