C语言
文章平均质量分 63
五毛变向.
大二菜鸡 看摆烂代码 品摆烂人生。
展开
-
C程序文件的缓冲区
1.C程序文件的缓冲区我们都知道程序编译之后给你产生一个你想要结果,比如printf(“hello”);这条语句执行完了就给你在终端屏幕上 输出hello了那这块的数据去哪块了呢?C程序在输出的时候是存在缓冲区的,当向显示器输出的时候,遇到 \n 则会立即刷新,这里我们可以用Linux下gcc来体验一下。这个是代码段 ,我直接gcc hello.c然后./a.out 执行这个程序我们发现hello world!这句先被刷新出来了之后才是那句hello就能很清晰的看到这个缓存区的存在。原创 2022-10-25 14:36:57 · 225 阅读 · 0 评论 -
浅析C语言结构体内存对齐问题
我们之前了解过浮点数,整数在计算机的存储方式,结构体他也有他的一套存储方式。#include<iostream>using namespace std;struct test { char a; int b; char c;};int main() { cout << sizeof(test) << endl;}sizeof出来是多少呢?这还不简单 1 + 4 + 1 = 6!那结果会是这样吗?答案真的是让我们大跌眼镜,那这样我把 b原创 2022-04-30 16:59:54 · 1197 阅读 · 5 评论 -
浅谈 C/C++ 的条件编译
1.条件编译的时机我们都知道vscode其实是一个编辑器,你要在上面跑C或者C++你需要配置编译器,拿编译器是怎样吧一个文本文件变成一个可执行文件的呢?那必然是经历以下这四步预处理:宏替换,头文件的展开,去注释,条件编译 编译:将预处理后的源文件转换为汇编语言文件,只编译源文件,不编译头文件,头文件在刚刚预处理阶段已经展开。 汇编:虽然叫做汇编,但是不是转变为汇编代码,而是将刚刚的汇编语言文件转换为机器码,也就是二进制文件。 链接:将生成的二进制代码与库函数以及其他目标文件,通过链接器链接原创 2022-04-22 09:24:49 · 6952 阅读 · 34 评论 -
C语言 程序的翻译 预处理 编译 汇编 链接 #define详解
1.程序的翻译环境和执行环境执行环境:所在操作系统的平台 win10 win11 linux翻译环境:MSVC gcc g++你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你集成到一块了,也就是所有的功能给你自动生成的,查看中间过程就有些困难,然而 Linux下就可以通过操作选项来一个个看到这些步骤,或者是用vs code这种编辑器配好win下的gcc就可以一步步的看到过程了。2.翻译的过程我们想要把一个.c文件变成一个.exe文件要经过一下过程2.1 预处理原创 2022-03-11 18:15:46 · 3318 阅读 · 1 评论 -
C语言 二分查找 折半查找 算法详解
二分查找首先最最重要就是你要查询的目标数组是一个有序的数组直接上代码#include <stdio.h>int binarysearch(int arr[], int size, int key) { int left = 0; int right = size - 1; while (left <= right) { int mid = (right + left) >> 1; if (key == arr[mid]) { return mid原创 2022-03-09 19:47:48 · 581 阅读 · 4 评论 -
C语言 进阶指针 指针数组与数组指针
1.指针数组和指针数组对于一个数组,我们应该立马联想,数组里面放的是什么?对于一个指针,我们应该立马联想,指针指向的是什么数据类型?显而易见指针数组里面放的是指针,数组指针就是定义了一个指针变量里面放的是数组的地址也就是这个指针指向了一个数组叫做数组指针。来看以下都是什么意思int *arr[10]//整型指针的指针数组int **arr[10]//二级整型指针的指针数组int (*arr)[10]//指向整型数组的数组指针具体一个标识符是什么类型主要的是看他对应符号相关操作符原创 2022-01-18 21:21:45 · 960 阅读 · 0 评论 -
C语言 字符串函数的模拟实现
1.strlen函数#include <stdio.h>int My_strlen(const char* s) { char* start = s; char* end = s; while (*end) { end++; } return end - start;}int main() { int num = 0; const char* str = "asdfghjkl"; num = My_strlen(str); printf("%d", num);原创 2022-02-17 15:52:16 · 539 阅读 · 0 评论 -
C语言 动态内存管理
1.动态内存管理我们已经掌握的内存开辟方法,用的最多的就是数组,但是首先我们知道数组实在栈上开辟空间的,要是我们开辟大量的空间怎么办呢?而且我不确定数据的大小万一造成内存资源浪费是不是也不划算呢?所以我认为一下两点就很充分的说明动态开辟内存存在的必要性。1.一般方式(栈上开辟)只能自动开辟少量的空间,但是堆上可以开辟大量的空间。2.对于不定长数据保存问题,动态开辟空间可以解决。2.动态开辟内存函数的介绍2.1 malloc和free函数C语言提供了一个动态开辟内存的函数。voi原创 2022-02-23 21:50:49 · 476 阅读 · 0 评论 -
C语言 指针的初级理解
指针是啥呢?指针变量是啥?指针是指针变量吗?相信很多同学都一直潜意识的认为指针就是指针变量,其实不然。指针是地址指针变量就是一个存放内存地址的变量int a = 1;int* p = &a;printf("%d", *p);这里p就是一个指针存放的是a的地址,我们俗话说就是p指针指向a。当我们用“*”号去解引用它时,编译器则会在p的地址中解引用当前地址存放的值,也就是找出来p指针指向的目标a既然指针变量是存放地址的变量那他会不会有地址,谁来放他的地址呢?也就是我们原创 2021-11-19 00:08:27 · 389 阅读 · 1 评论 -
C语言 整数 和 浮点数的储存
1.整数在内存中的存储1.1原码,反码,补码计算机中的整数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位 负整数的三种表示方法各不相同。正整数的话原反补都相同负整数的话:原码 直接将二进制按照正负数的形式翻译成二进制就可以。 反码 将原码的符号位不变,其他位依次按位取反就可以得到了。 补码 反码+1就得到补码。 由补码得到原码有两种方法1.把上面的过程逆着来一遍 2.再把上面的过程做一遍就可以了存原创 2022-01-12 01:42:20 · 589 阅读 · 0 评论