
c 语言
luoganttcc
微信:luogantt2
展开
-
c 语言实现矩阵乘法
【代码】c 语言实现矩阵乘法。原创 2025-02-13 20:23:51 · 71 阅读 · 0 评论 -
Makefile 函数 wildcard 使用详细介绍】
wildcard函数是Makefile中的一个内建函数,用于获取符合特定模式的文件名列表。例如,会获取当前目录下所有以.c为扩展名的文件列表。一个更具体的例子:假设我们有一个目录,其中包含多个C源文件,我们可以使用wildcard函数来获取这些源文件的列表,然后生成目标文件列表,并编写规则来编译这些源文件。allOBJSocgccc $o $@123456在这个例子中,会获取所有.c文件,然后我们使用模式替换来生成所有.o文件。规则%.o: %.c。转载 2024-11-04 21:58:44 · 767 阅读 · 0 评论 -
Learn Makefiles
【代码】Learn Makefiles。原创 2024-11-03 23:44:34 · 820 阅读 · 0 评论 -
Visual C++6.0安装教程(win10版)及“应用程序无法正常启动(0x0150002)”解决办法
Visual C++6.0安装教程(win10版)及“应用程序无法正常启动(0x0150002)”解决办法原创 2022-04-06 17:20:50 · 3455 阅读 · 0 评论 -
为什么 在内存中为什么 0xffff 是 -1
文章目录前言数在内存中是如何表示的?-1 的二进制编码前言数在内存中是如何表示的?在计算机中数值是以二进制补码形式存在的。正数的补码不变负数的补码为 原码 ->取反 -> 加一有符号二进制数–补码-1 的二进制编码+1 的二进制 (第一位是符号位)0000 0000 0000 0001-1 的二进制 (第一位是符号位)1000 0000 0000 0001-1 的二进制 (第一位是符号位)1000 0000 0000 0001-1 的二进制反码11原创 2022-04-06 13:47:33 · 1213 阅读 · 0 评论 -
gcc 流程
原创 2022-04-04 15:24:50 · 108 阅读 · 0 评论 -
gdb 调试 hello word char *详细指针
link#include<iostream>using namespace std;int main(){ char *p="hello"; return 0;} g++ -g main.cpp -o main gdb main lb 5 r n 显示hello这个字符串x/1sb p0x555555554835: "hello"输出char 格式(gdb) x/5cb p0x555555554835: 104 '原创 2022-03-31 17:15:06 · 444 阅读 · 0 评论 -
gdb 调试core 文件
vi gdb_error.c#include<stdio.h>int main(){ int *temp=NULL; *temp=10; return 0;}ulimit -c unlimitedgcc -g gdb_error.c -o gdb_errorgdb gdb_errorb 7r 将值付给一个空指针Program received signal SIGSEGV, Segmentation fault.0x000055555555460a原创 2022-03-31 07:04:51 · 156 阅读 · 0 评论 -
用GDB查看大小端
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录摘要:一、大小端二、用GDB查看大小端2.1 源程序如下:2.2 编译进入调试2.3 查看内存,判断大小端三、GDB查看内存x命令用法摘要:写这篇博文一来重温下大小端,二来学习下GDB查看内存的相关命令。本文简要介绍大小端,并通过用GDB查看内存的方式判断大小端,最后详细介绍了GDB查看内存详细用法。一、大小端 Endian表示数据在存储器中的存放顺序,大端将高.原创 2022-03-30 17:58:29 · 1392 阅读 · 0 评论 -
借助联合体union的特性实现检测当前计算机环境采用的是大端模式还是小端模式
方式一: 借助联合体union的特性实现(联合体类型数据所占的内存空间等于其最大的成员所占的空间,对联合体内部所有成员的存取都是相对于该联合体基地址的偏移量为 0 处开始,也就都是从该联合体所占内存的首地址位置开始。)#include <stdio.h>int main(){ union{ int a; //4 bytes char b; //1 byte } data; data.a = 1; //占4 bytes,十六进制可表示为原创 2022-03-30 10:12:23 · 415 阅读 · 0 评论 -
C语言指针是什么?1分钟彻底理解C语言指针的概念
#include <stdio.h>int main(){ int a = 100; char str[20] = "c.biancheng.net"; printf("%#X, %#X\n", &a, str); return 0;}运行结果:0X28FF3C, 0X28FF10%#X表示以十六进制形式输出,并附带前缀0X。a 是一个变量,用来存放整数,需要在前面加&来获得它的地址;str 本身就表示字符串的首地址,不需要加&原创 2022-03-30 07:52:29 · 5190 阅读 · 0 评论 -
(char*)&x C语言中的&和*的详解
C语言中的指针是个让人看着,想着就头疼的问题;学习指针之前要先要懂得几个概念,在此先根据自己实际工作中遇到的几个例子说明一下。配上程序和编译结果。&和*在C语言中的含义:&取地址,*取值。*(char *)&a:含义就是先取a的首地址,然后强制转换为char指针类型,然后取该指针的值。...原创 2022-03-29 17:11:06 · 8387 阅读 · 0 评论 -
用户模式和内核模式
link首先我们要解释一个概念——进程(Process)。简单来说,一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间。严格来说,程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后一些列的活动,是一个动态的概念。前面我们在讲解地址空间时,一直说“程序的地址空间”,这其实是不严谨的,应该说“进程的地址空间”。一个进程对应一个地址空间,而一个程序可能会创建多个进程。 内核模式和用户模式原创 2022-03-28 15:38:22 · 262 阅读 · 0 评论 -
Linux下C语言程序的内存布局(内存模型)
在《虚拟地址空间以及编译模式》一节中讲到,虚拟地址空间在32位环境下的大小为 4GB,在64位环境下的大小为 256TB,那么,一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪里?代码在哪里?为什么要这样分布?这些就是本节要讲解的内容。程序内存在地址空间中的分布情况称为内存模型(Memory Model)。内存模型由操作系统构建,在Linux和Windows下有所差异,并且会受到编译模式的影响,本节我们讲解Linux下32位环境和64位环境的内存模型。 内核空间和用户空间对于32位环境原创 2022-03-28 15:23:11 · 324 阅读 · 0 评论 -
虚拟地址空间以及编译模式
原文链接虚拟地址空间以及编译模式< 上一页虚拟内存到底是什么?为什么我们在C语言中看到的地址是假的?C语言内存对齐,提高寻址效率下一页 >所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围。虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响。这节我们先讲解CPU,再讲解编译模式,让大家了解编译器是如何配合CPU来提高程序运行速度的。 CPU的数据处理能力CPU是计算机的核心,决定了计算机的数据处理能力原创 2022-03-28 15:16:58 · 273 阅读 · 0 评论 -
c++ 读取二进制bin文件
linkofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O. 1、插入器(<<) 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<“Write Stdout”<<’\n’;就表示把字符串"Write Stdout"和换行字符(’\n’)输出到标准输出流。 2、析原创 2022-02-20 21:32:29 · 5887 阅读 · 0 评论 -
C 库函数 int fprintf(FILE *stream, const char *format, ...) 发送格式化输出到流 stream 中
#include <stdio.h>#include <stdlib.h>int main(){ FILE * fp; fp = fopen ("file.txt", "w+"); fprintf(fp, "%s %s %s %d", "We", "are", "in", 2014); fclose(fp); return(0);}原创 2022-02-14 19:28:41 · 391 阅读 · 0 评论 -
Linux 中的动态链接库和静态链接库是干什么的?
link什么是库?库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。 windows上对应的是.lib .dll linux上对应的是.a .so在这里先介绍下Linux下的gcc编译的几个选项g++ -c hellospeak.cpp会将hellospeak.cpp 选原创 2022-01-04 20:13:57 · 330 阅读 · 0 评论 -
谈谈程序链接及分段那些事
谈谈程序链接及分段那些事如果读过我之前的文章就会知道,程序构建大概需要经历四个过程:预处理、编译、汇编、链接,这里主要介绍链接这一过程。链接链的是什么?链接链的就是目标文件,什么是目标文件?目标文件就是源代码编译后但未进行链接的那些中间文件,如Linux下的.o,它和可执行文件的内容和结构很相似,格式几乎是一样的,可以看成是同一种类型的文件,Linux下统称为ELF文件,这里介绍下ELF文件标准:可重定位文件:Linux中的.o,这类文件包含代码和数据,可被链接成可执行文件或共享目标文件,例如静态原创 2022-01-04 19:17:13 · 305 阅读 · 0 评论 -
手把手教你构建 C 语言编译器
手把手教你构建 C 语言编译器c4原创 2022-01-04 14:41:07 · 705 阅读 · 0 评论 -
Linux下CMake简明教程(二)同一目录下多个源文件
接下来进入稍微复杂的例子:在同一个目录下有多个源文件。在之前的目录下添加2个文件,testFunc.c和testFunc.h。添加完后整体文件结构如下,(base) ledi@ledi-MRC-WX0:~/slam_md40/learn_orbslam/makfile_learn/CMake简明教程/c2$ tree .├── build├── CMakeLists.txt├── main.c├── testFunc.c└── testFunc.h1 directory, 4 files原创 2021-11-23 16:27:01 · 256 阅读 · 0 评论 -
Linux下CMake简明教程
Linux下CMake简明教程原创 2021-10-21 18:36:52 · 193 阅读 · 0 评论 -
CMake基础 第12节 设置C++标准
添加链接描述原创 2021-10-18 23:12:09 · 384 阅读 · 0 评论 -
malloc 就是返回开辟内存空间的首地址
#include<stdio.h>#include <stdlib.h> int main() { int* p; p = (int*)malloc(100 * 1024); //p++; //改变了 p 的首地址; printf("p的地址== %p p的地址",p); //printf("p++的地址== %p p的地址",p++); free(p);//free 没原创 2021-02-25 21:18:47 · 773 阅读 · 0 评论 -
C 中 i++ 与 ++i 有什么区别
#include <stdio.h>int main(int argc, char **argv) { int i=1; printf("i++= %d\n",i++); i=1; printf("++i= %d\n",++i); i=1; i=i+1; printf("i=i+1 ,则i= %d\n",i); return 0;}i++= 1++i= 2原创 2021-02-14 12:12:44 · 444 阅读 · 0 评论 -
C语言 NULL与0 对应的地址
#include <stdio.h>int main(int argc, char **argv) { int *p=0; int *q=NULL; printf("0 的地址是 %p \n",p); printf ("NULL 的地址是%p \n",p); return 0;}0 的地址是 (nil) NULL 的地址是(nil)原创 2021-02-09 18:30:09 · 2191 阅读 · 0 评论 -
C 语言 malloc用法实验
malloc 就是在内存中开辟一段空间,并且返回这段空间的首地址a=(int *)malloc(number *sizeof(int));malloc 只是申请一段空间,单位是字节,但是这段空间到底是多少个字节为一个单元,没有指定在这里通过强制类型转换,将这段空间切成每四个字节一段#include <stdio.h>#include <stdlib.h>// malloc 就是在内存中开辟一段空间,并且返回这段空间的首地址int main(int argc,cha原创 2021-02-04 17:54:48 · 317 阅读 · 0 评论 -
C语言交换两个数的值与形参与实参理解
C Simple Swap Program – Assignments通过赋值来实现交换变量vi swap_simple0.c#include <stdio.h>int main() { int a = 23, b = 47; int t; printf("Before. a: %d, b: %d\n", a, b); t = a; a = b; b = t; printf("After. a: %d, b: %d\n", a, b);原创 2021-01-31 22:27:13 · 744 阅读 · 1 评论 -
结构体定义 typedef struct 用法详解和用法小结
typedef是类型定义的意思。typedef struct 是为了使用这个结构体方便。区别在于:若struct node{ }这样来定义结构体的话。在定义 node 的结构体变量时,需要这样写:struct node n;若用typedef,可以这样写:typedef struct node{}NODE; 。在申请变量时就可以这样写:NODE n;其实就相当于 NODE 是node 的别名。区别就在于使用时,是否可以省去struct这个关键字。首先:在C中定义一个结构体类型时如果要用typede原创 2021-01-28 21:59:51 · 908 阅读 · 0 评论 -
结构体赋值
#include <stdio.h>#include <string.h>struct AGE{ int year; int month; int day;};struct STUDENT{ char name[20]; int num ; struct AGE birthday; float score;};int main (void) { struct STUDENT student1; struct原创 2021-01-20 17:10:29 · 196 阅读 · 0 评论 -
C语言结构体例子 (一)
/*统计候选人的选票,有三个候选人,一共有十个候选人,输出每个人的票数* * */#include<stdio.h>#include<string.h>#define LEN 100#include <stdlib.h>struct candidate{ char name[LEN]; int count ;};////int main(){ struct candidate cand[3]={{"tom",0}.原创 2021-01-19 15:56:18 · 565 阅读 · 2 评论 -
c语言gets()函数与它的替代者fgets()函数
在c语言中读取字符串有多种方法,比如scanf() 配合%s使用,但是这种方法只能获取一个单词,即遇到空格等空字符就会返回。如果要读取一行字符串,比如:I love BIT这种情况,scanf()就无能为力了。这时我们最先想到的是用gets()读取.gets()函数从标准输入(键盘)读入一行数据,所谓读取一行,就是遇到换行符就返回。gets()函数并不读取换行符’\n’,它会吧换行符替换成空字符’\0’,作为c语言字符串结束的标志。gets()函数经常和puts()函数配对使用,puts()函数用于原创 2021-01-18 21:21:45 · 2554 阅读 · 0 评论