当前位置: 首页 > article >正文

C和C++的区别详解

通过程序来介绍12345678//c program#includeiostreamusingnamespacestd;intmain(void){cout This is a c program. endl;return0;}1.iostream文件iostream中的io指的是输入进入程序的信息和输出从程序中发送出去的信息。并且c的输入、输出方案涉及iostream文件中的多个定义。比如用来输出信息的cout就在其中。2.头文件名的区别C语言C语言的传统是头文件使用扩展名 h将其作为一种通过名称标识文件类型的简单方式。例如 math.h支持一些数学函数。CC头文件没有扩展名。有些C头文件被转换成C头文件这些文件被重新命名去掉了扩展名h并在文件名称前面加上前缀c表示来自C语言3.名称空间namespace如果使用的是iostream,而不是iostream.h则应使用名称空间编译指令来使iostream中的定义对程序可用即1usingnamespacestd;有了这句using编译指令才能使用cout、cin等或者用第二种方式123usingstd::cout;usingstd::cin;usingstd::endl;名称空间是C的特性之一简单理解为可以将自己的产品封装起来。示例封装性示例首先定义一个头文件在里面写上我们自己编的东西123456#pragma oncenamespaceAA{typedefintINT;typenamecharCHAR;};然后在cpp文件中引入该头文件但我们却无法使用之前写好的东西。INT a会报错因为我们只引入了头文件没有使用里面的名称空间。正确做法123456789101112//c program#includeiostream#includeAA.husingnamespacestd;usingnamespaceAA;//using AA::INT;intmain(void){INTa 10;cout a endl;return0;}需要第六行的该名称空间才可以使用其中的产品。或者可以用第七行这种写法来确定自己只需要哪个产品。运行结果4.使用cout进行C的输出上面的程序有这条C语句1cout This is a C program. endl;符号表示该语句将把这个字符串发送给cout该符号指出了信息流动路径。 cout是一个预定义的对象。从概念上看输出是一个流即从程序流出的一系列字符。cout对象表示这种流其属性是在iostream文件中定义的。cout的对象属性包括一个插入运算符它可以将其右侧的信息插入到流中。图示指针和数组名的区别程序示例1234567891011#includeiostreamusingnamespacestd;intmain(void){inta 10;int* p a;intarr[] { 0,1,2,3,4 };cout p endl;cout arr endl;return0;}这里定义了一个指针p和一个数组arr。运行结果都是地址反汇编查看区别cout p endl;123456cout p endl;008F52AF mov esi,esp008F52B1 push offset std::endlchar,std::char_traitschar (08F103Ch)008F52B6 mov edi,esp008F52B8 mov eax,dword ptr [p]008F52BB push eaxcout arr endl;123456cout arr endl;008F52DE mov esi,esp008F52E0 push offset std::endlchar,std::char_traitschar (08F103Ch)008F52E5 mov edi,esp008F52E7 lea eax,[arr]008F52EA push eax区别在输出指针时需要先从p里面取出四字节再放到寄存器里push在输出arr时直接把arr放到寄存器里再push。结论指针是变量数组名是一个地址——常量。解引用在C语言中学到对指针解引用后得到的值就是它寸的地址对应的变量值。可以来探索原理程序示例123456789#includeiostreamusingnamespacestd;intmain(void){inta 10;int* p a;*p 20;return0;}反汇编代码12345678inta 10;000D18FF mov dword ptr [a],0Ahint* p a;000D1906 lea eax,[a]000D1909 mov dword ptr [p],eax*p 20;000D190C mov eax,dword ptr [p]000D190F mov dword ptr [eax],14h对于*p 20先从p的内存中取四个字节即变量a的地址放入寄存器再将20给到寄存器所存的的四字节中。完成对变量a的改变。所以解引用的意思就是从地址中把值取出来这里是去p的地址里取出所存的变量a的地址。程序示例2123456789#includeiostreamusingnamespacestd;intmain(void){inta 10, b 20;int* p a;b *p;return0;}反汇编代码12345678910inta 10, b 20;000818FF mov dword ptr [a],0Ah00081906 mov dword ptr [b],14hint* p a;0008190D lea eax,[a]00081910 mov dword ptr [p],eaxb *p;00081913 mov eax,dword ptr [p]00081916 mov ecx,dword ptr [eax]00081918 mov dword ptr [b],ecx对于 b *p;1.先去p里取出四字节放入寄存器2.再从寄存器eax取出四字节放入寄存器ecx再把ecx3.的内容放入到变量b的四字节中。也可以看出解引用这一步其实是去地址里取值的。这样也可以得出用一个变量赋值给另一个变量其实也是在解引用。示例123456789#includeiostreamusingnamespacestd;intmain(void){inta 10;intb;b a;return0;}反汇编123456inta 10;002D18F5 mov dword ptr [a],0Ahintb;b a;002D18FC mov eax,dword ptr [a]002D18FF mov dword ptr [b],eax对于 b a;也是从a地址里取出四字节放到寄存器再通过寄存器给入b。结论解引用到地址里去取值。const的区别C语言中为常变量示例123456789//const#includestdio.hintmain(void){constinta 10;intb 100;//常量赋值b a;//常变量赋值return0;}两次赋值的区别1234567const int a 10;00311825 mov dword ptr [a],0Ahint b 100;0031182C mov dword ptr [b],64hb a;00311833 mov eax,dword ptr [a]00311836 mov dword ptr [b],eax常量赋值时是直接把值给到b的四字节中用const修饰的a赋值时还是需要从a里取出四字节再赋给b。所以C语言中const修饰的变量叫做常变量——不能作为左值。甚至可以用指针改变它的值12345678910#includestdio.hintmain(void){constinta 10;intb 100;b a;int* p a;*p 20;return0;}a的变化const修饰的变量a居然能被改变C中的const在C中const修饰的变量就是常量和常量性质一样在编译期间直接将常量的值替换到常量的使用点。示例12345678intmain(void){constinta 10;intb, c;b 16;c a;return0;}反汇编代码1234567const int a 10;00B917F5 mov dword ptr [a],0Ahint b, c;b 16;00B917FC mov dword ptr [b],10hc a;00B91803 mov dword ptr [c],0Ah可以看出对b赋值常量是直接赋值对c赋值const修饰的变量a,同样是用常量赋值的。所以在C中 const修饰的变量和常量性质一样都是在编译期将常量值替换到常量的使用点。另外1.而且const修饰的变量必须初始化同样因为编译期间就会替换为常量不初始化后面也没有机会再对其赋值。2.如果用变量对const修饰的变量赋值则会使其退化成常变量。声明时const位置不同的区别示例const可在不同位置修饰变量12345678910111213intmain(void){inta 10;int* p1 a;constint* p2 a;intconst* p3 a;int*constp4 a;int* q1 a;constint* q2 a;intconst* q3 a;int*constq4 a;return0;}要注意的是const与离他最近的类型结合是该变量的类型除了最近的类型剩下的就是const修饰的内容。const修饰的内容是不可作为左值。

相关文章:

C和C++的区别详解

通过程序来介绍12345678//c program#include<iostream>using namespace std;int main(void){cout << "This is a c program." << endl;return 0;}1.iostream文件iostream中的io指的是输入&#xff08;进入程序的信息&#xff09;和输出&#xff08…...

通义千问1.8B-GPTQ-Int4效果实测:中文问答、代码生成、多轮对话精彩案例集

通义千问1.8B-GPTQ-Int4效果实测&#xff1a;中文问答、代码生成、多轮对话精彩案例集 1. 模型简介与部署验证 通义千问1.5-1.8B-Chat-GPTQ-Int4是一个经过量化优化的轻量级语言模型&#xff0c;专门针对中文场景进行了深度优化。这个模型基于Transformer架构&#xff0c;采用…...

【工业级边缘AI落地生死线】:从裸机C到Qwen1.5-0.5B微缩版——3个不可绕过的栈溢出熔断点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;工业级边缘AI落地的栈空间本质认知 工业级边缘AI并非仅是“模型往设备上搬”&#xff0c;其核心挑战在于栈空间&#xff08;Stack Space&#xff09;的跨层耦合性——从硅基硬件寄存器、RTOS内核栈、推…...

VSCode AI本地化配置实战手册(含Ollama+Cursor+Tabby三平台对比实测)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode AI本地化配置全景概览 在本地环境中为 VSCode 集成 AI 能力&#xff0c;核心在于解耦云端依赖、保障数据隐私&#xff0c;并实现模型轻量化运行。当前主流方案依托 Ollama CodeLLaMA / Phi-3 …...

SenseVoice-small-onnx开源ASR部署教程:无需CUDA依赖的CPU友好型方案

SenseVoice-small-onnx开源ASR部署教程&#xff1a;无需CUDA依赖的CPU友好型方案 本文介绍如何快速部署SenseVoice-small-onnx语音识别模型&#xff0c;这是一个完全基于CPU运行的轻量化方案&#xff0c;无需GPU也能获得高效的语音转写体验。 1. 项目概述 SenseVoice-small-on…...

小白福音:nli-MiniLM2零样本分类,开箱即用,轻松处理评论情感分析

小白福音&#xff1a;nli-MiniLM2零样本分类&#xff0c;开箱即用&#xff0c;轻松处理评论情感分析 1. 为什么你需要零样本分类工具&#xff1f; 在日常工作中&#xff0c;你是否遇到过这些困扰&#xff1a; 需要快速对大量用户评论进行情感分析&#xff0c;但没有标注好的…...

Mega框架解析:模块化Web3基础设施构建与实战指南

1. 项目概述&#xff1a;Mega&#xff0c;一个面向Web3基础设施的“巨无霸”框架如果你最近在Web3开发圈子里转悠&#xff0c;大概率会听到“Mega”这个名字。它不是某个新的加密货币&#xff0c;也不是一个去中心化应用&#xff0c;而是一个由Web3Infra Foundation孵化的开源框…...

【收藏备用|2026年版】AI Agent落地瓶颈破解:从构建到运营,AI操作系统才是核心竞争力

2026年&#xff0c;AI Agent开发工具已进入全民可及的成熟阶段&#xff0c;但运营Agent的基础设施建设&#xff0c;却成为制约AI规模化落地的核心瓶颈。本文深度解析&#xff1a;当前AI Agent开发工具愈发完善&#xff0c;但缺乏统一的管理与长效运营能力&#xff0c;AI操作系统…...

Universal x86 Tuning Utility:免费解锁硬件潜力的完整指南

Universal x86 Tuning Utility&#xff1a;免费解锁硬件潜力的完整指南 【免费下载链接】Universal-x86-Tuning-Utility Unlock the full potential of your Intel/AMD based device. 项目地址: https://gitcode.com/gh_mirrors/un/Universal-x86-Tuning-Utility 你是否…...

神经网络训练中的早停机制原理与实践

1. 神经网络训练中的早停机制解析在深度学习模型训练过程中&#xff0c;我们常常面临一个关键抉择&#xff1a;何时停止训练才能获得最佳模型性能&#xff1f;继续训练可能导致过拟合&#xff0c;而过早停止又可能欠拟合。早停&#xff08;Early Stopping&#xff09;正是解决这…...

SilentPatchBully终极指南:如何让《恶霸鲁尼》在Windows 10/11稳定运行

SilentPatchBully终极指南&#xff1a;如何让《恶霸鲁尼》在Windows 10/11稳定运行 【免费下载链接】SilentPatchBully SilentPatch for Bully: Scholarship Edition (fixes crashes on Windows 10) 项目地址: https://gitcode.com/gh_mirrors/si/SilentPatchBully Sile…...

字节跳动UI-TARS-desktop:混合渲染架构下的高性能桌面应用开发新范式

1. 项目概述与核心价值 最近在桌面端跨平台开发领域&#xff0c;一个名为 bytedance/UI-TARS-desktop 的项目在开发者社区里引起了不小的讨论。乍一看这个标题&#xff0c;你可能会有点懵&#xff1a;“UI-TARS”是什么&#xff1f;字节跳动开源的这个桌面项目&#xff0c;到…...

打破语言壁垒:XUnity.AutoTranslator让全球游戏无障碍畅玩

打破语言壁垒&#xff1a;XUnity.AutoTranslator让全球游戏无障碍畅玩 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾因语言障碍而错过精彩的游戏剧情&#xff1f;XUnity.AutoTranslator作为一款…...

微积分的变量艺术:超越x与y的微分与积分实践

1. 微积分本质&#xff1a;关于任意变量的微分与积分微积分从来就不该被束缚在x和y的坐标系里。当我第一次在工程问题中需要对时间变量t求导、又在物理实验中需要对温度变量T积分时&#xff0c;突然意识到——微积分的本质是研究变化率与累积效应的工具&#xff0c;而变量选择应…...

终极指南:5步将你的Switch手柄变成PC游戏控制器

终极指南&#xff1a;5步将你的Switch手柄变成PC游戏控制器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.com/gh_mir…...

Unity游戏自动翻译终极指南:3种安装方法+5大实用技巧

Unity游戏自动翻译终极指南&#xff1a;3种安装方法5大实用技巧 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 你是否曾经因为语言障碍而无法畅玩心仪的日文或韩文Unity游戏&#xff1f;是否在游戏过程中…...

LILYGO T-Connect Pro工业物联网控制器全解析

1. LILYGO T-Connect Pro工业物联网控制器深度解析在工业自动化领域&#xff0c;设备联网和远程控制的需求日益增长。LILYGO T-Connect Pro作为一款基于ESP32-S3的多协议工业物联网控制器&#xff0c;集成了Ethernet、WiFi、蓝牙、LoRa等多种通信方式&#xff0c;以及RS232、RS…...

15分钟精通BetterJoy:Switch手柄PC适配终极指南,解锁跨平台游戏控制新体验

15分钟精通BetterJoy&#xff1a;Switch手柄PC适配终极指南&#xff0c;解锁跨平台游戏控制新体验 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput …...

千问 LeetCode 1862.向下取整数对和 public int sumOfFlooredPairs(int[] nums)

这是一道经典的算法题&#xff0c;考察的是前缀和与数论分块&#xff08;倍数枚举&#xff09;的思想。如果直接暴力枚举每一对 (i, j)&#xff0c;时间复杂度是 O(N^2)&#xff0c;在数据量较大时会超时。我们需要转换思路&#xff1a;不直接计算每一对&#xff0c;而是计算每…...

千问 LeetCode 1851.包含每个查询的最小区间 public int[] minInterval(int[][] intervals, int[] queries)

这道题是经典的离线查询&#xff08;Offline Query&#xff09;配合优先队列&#xff08;PriorityQueue&#xff09;的题目。核心思路如果我们对每个查询都遍历一遍所有区间&#xff0c;时间复杂度是 O(Q times N)&#xff0c;会超时。我们需要利用排序和堆来优化。策略&#x…...

3分钟快速上手:免费解锁网易云音乐NCM格式的完整指南

3分钟快速上手&#xff1a;免费解锁网易云音乐NCM格式的完整指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的歌曲只能在特定客户端播放而烦恼吗&#xff1f;ncmdump是你需要的终极解决方案&#xff01;这…...

Qwen3-4B-Thinking-Gemini-Distill惊艳效果:思考过程中自动识别并标注关键前提假设

Qwen3-4B-Thinking-Gemini-Distill惊艳效果&#xff1a;思考过程中自动识别并标注关键前提假设 1. 模型介绍 Qwen3-4B-Thinking-Gemini-Distill是基于Qwen3-4B-Thinking-2507的社区蒸馏版本&#xff0c;由TeichAI使用Gemini 2.5 Flash生成的5440万tokens监督微调而成。这个推…...

5分钟掌握百度网盘直链解析:告别限速的终极解决方案

5分钟掌握百度网盘直链解析&#xff1a;告别限速的终极解决方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否厌倦了百度网盘令人抓狂的下载速度限制&#xff1f;想要…...

Blender 3MF插件终极指南:从设计到3D打印的完整解决方案

Blender 3MF插件终极指南&#xff1a;从设计到3D打印的完整解决方案 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 3D打印爱好者们&#xff0c;你是否曾为Blender模型导…...

Pixel Agents:将AI编程助手可视化为像素办公室的VS Code扩展

1. 项目概述&#xff1a;当AI智能体走进像素办公室如果你和我一样&#xff0c;每天在VS Code里和Claude Code这类AI编程助手打交道&#xff0c;看着它在终端里一行行地输出代码、执行命令&#xff0c;你可能会觉得这个过程虽然高效&#xff0c;但总有点……冷冰冰的。我们与AI的…...

基于Agent-Dev框架的智能体开发:从模块化设计到生产部署实践

1. 项目概述&#xff1a;从“Agent-Dev”看智能体开发的新范式最近在GitHub上看到一个挺有意思的项目&#xff0c;叫little51/agent-dev。光看名字&#xff0c;你可能会觉得这又是一个关于AI智能体开发的常规工具库。但当我深入进去&#xff0c;把它的代码、文档和社区讨论都翻…...

Nordic nRF7002 EBII Wi-Fi 6扩展板解析与应用

1. Nordic nRF7002 EBII Wi-Fi 6扩展板深度解析作为Nordic Semiconductor最新推出的Wi-Fi 6扩展解决方案&#xff0c;nRF7002 EBII代表了低功耗物联网设备无线连接技术的重要演进。这款扩展板专为nRF54L系列开发套件设计&#xff0c;在原有nRF7002基础上实现了多项关键升级。提…...

终极指南:如何使用XUnity.AutoTranslator为Unity游戏添加智能翻译

终极指南&#xff1a;如何使用XUnity.AutoTranslator为Unity游戏添加智能翻译 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 想要畅玩日文、韩文或其他外语Unity游戏却苦于语言障碍&#xff1f;XUnity.A…...

ResourceOverride终极指南:掌控网页资源的强大调试神器

ResourceOverride终极指南&#xff1a;掌控网页资源的强大调试神器 【免费下载链接】ResourceOverride An extension to help you gain full control of any website by redirecting traffic, replacing, editing, or inserting new content. 项目地址: https://gitcode.com/…...

10个免费Illustrator脚本终极指南:彻底改变你的设计工作流

10个免费Illustrator脚本终极指南&#xff1a;彻底改变你的设计工作流 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否厌倦了在Adobe Illustrator中重复执行繁琐的操作&#…...