
C/C++
文章平均质量分 52
写代码的小姜
资料里面的资料包括不限于电子设计竞赛、智能车、matlab仿真设计、人工智能算法等资料,都是本人多次验证之后确保没有问题的时候才上传优快云,如果你下载以后有问题请私聊我,我会马上解决。
展开
-
头文件互相包含所引发的的问题(深入剖析)
今天写程序出现了一个让人蛋疼的错误,后来发现是由于头文件互相包含所引起的。原本只是简单的以为头文件互相包含只会触发,头文件的递归包含。即,A包含B,所以才A的头文件里会将B的头文件内容拷贝过来,然后B里又包含A,又将A拷贝一份,这样就会无限循环。(下图为A.h和B.h互相包含,进行预编译时的结果·)对于上述的问题,windows中有特有的#pragma once。但是更通用的做法是#ifndef INCLUDE_文件名_H#define INCLUDE_文件名_H/中间内容/#endif//转载 2022-03-07 14:05:27 · 1195 阅读 · 0 评论 -
vscode关闭C++红色波浪线
打开vscode的设置选项(File -> Preferences -> Settings)在搜索栏输入 squiggle, 将出现的 Error Squiggles 选项改为 Disabled原创 2021-03-20 22:09:07 · 1255 阅读 · 0 评论 -
C++中引用传递与指针传递的区别
精简版:指针:变量,独立,可变,可空,替身,无类型检查;引用:别名,依赖,不变,非空,本体,有类型检查;完整版:1 概念指针从本质上讲是一个变量,变量的值是另一个变量的地址,指针在逻辑上是独立的,它可以被改变的,包括指针变量的值(所指向的地址)和指针变量的值对应的内存中的数据(所指向地址中所存放的数据)。引用从本质上讲是一个别名,是另一个变量的同义词,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化(先有这个变量,这个实物,这个实物才能有别名),而且其引用的对象在其整转载 2021-02-07 16:08:56 · 779 阅读 · 0 评论 -
为什么C语言里的指针在64位系统中指针的大小都是8,而32位系统中都是4?
1 知识误区明白了两个系统的寻址原理就能明白,地址跟系统有关,但是基本数据类型占的大小是由C语言本身决定。2.实例64位系统,这个位数指的是CPU 里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64,所以:sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8。32位系统,同理,他的一个地址占32位二进制空间,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8原创 2021-02-07 11:31:24 · 2305 阅读 · 0 评论 -
深拷贝和浅拷贝的区别
1 简单理解深拷贝和浅拷贝最根本的区别在于是否真正获取一个对象的复制实体,而不是引用。假设B复制了A,修改A的时候,看B是否发生变化:如果B跟着也变了,说明是浅拷贝,拿人手短!(修改堆内存中的同一个值)如果B没有改变,说明是深拷贝,自食其力!(修改堆内存中的不同的值)**浅拷贝(shallowCopy)**只是增加了一个指针指向已存在的内存地址,**深拷贝(deepCopy)**是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个新的内存,使用深拷贝的情况下,释放内存的时候不会原创 2021-02-06 21:45:13 · 12466 阅读 · 0 评论 -
CMakeLists.txt 语法介绍与实例演练
一、Cmake 简介cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。二、常用命令1. 指定 cmake 的最小版本cmake_minimum_required(VERSION 3.4.1)这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.txt 文件中使用了一些高版本 cmake 特有的一些命令的时候,就需要加上这样一行,提醒用户升级到该版本之后再执行 cmake。转载 2021-02-04 23:44:10 · 221 阅读 · 0 评论 -
对于结构体指针的总结
结构体指针就是指向结构体的指针,我们通过“结构体变量名.成员名”的方式引用结构体变量中的成员,还可以使用指针。使用一个小程序来讲解案例:# include <stdio.h># include <string.h>struct AGE{ int year; int month; int day;};struct STUDENT{ char name[20]; //姓名 int num; //学号 struct AGE原创 2021-01-25 00:37:36 · 381 阅读 · 0 评论 -
对于指针 void*以及void **等的一些理解与疑惑
本人最近学习过程中老是遇到一些指针操作,由于基础薄弱,查阅了很多资料仍然对于多重指针存在一伙,现在把我对于指针的理解以及疑惑写出来,恳请网友帮我指点迷津。首先,void* 定义一个void类型的指针,它不指向任何类型的数据,意思是,void指针“指向空类型”或“不指向确定的类型”,而不要理解为void指针能指向“任何的类型”数据。简而言之:void只提供一个地址,没有指向。可以把非void指针赋给void指针,但不能把void指针直接赋给非void指针,必须先强转。例如:void *pv;char原创 2021-01-25 00:05:00 · 614 阅读 · 0 评论 -
c语言中命令行参数argc,argv[]详解
argc 是 argument count的缩写,表示传入main函数的参数个数;argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个;简单用法示例,新建工程键代码:void main(int argc,char *argv[]){ for(int i=0;i<argc;i++) cout<&l原创 2021-01-19 16:28:59 · 9012 阅读 · 4 评论 -
C语言main主函数带参数是做什么用的
C语言的带参数的baimain函数格du式为main(int argc,char* argv[]),其中zhiargc为参数个数加1,argv为参数列表,dao从zhuanargv[1]开始。编译后生成可执shu行文件,可以在执行的程序后加参数,比如编译一个程序为test.exe,则在执行时可以输入:test.exe 1 firestone在这里,argc等于3,argv[0]为"test.exe",argv[1]为"1",argv[2]为"firestone"。如果有下面的程序:#include原创 2021-01-19 11:29:03 · 464 阅读 · 0 评论 -
data=*(vu32*)addr;的理解?
首先addr是一个32位的整形数据(比如是0x80040000),代表的是一个地址(地址一般都是32位的),(VU32*)就是把这个整数强制转换成一个指针(这个指针还是32位的,只不过它指向的数据是32位的),这个指针指向的地址里面存了一个类型为vu32的变量x,(vu32)addr就是把这个x赋值给data。再来看另一个例子(怎么样通过寄存器的地址来操作寄存器,就是给寄存器赋值,下面这句话就可以操作寄存器):很多时候我们会看到下面的宏定义#define MEM_ADDR(addr)原创 2020-12-12 15:46:02 · 4191 阅读 · 1 评论