机器人CPP编程基础-02变量Variables

news2024/12/23 14:43:54

机器人CPP编程基础-01第一个程序Hello World

基础代码都可以借助人工智能工具进行学习。


C++ 

#include<iostream>

using namespace std;

main()
{
    //Declaring an integer type variable A, allocates 4 bytes of memory.
    int A=4;

    cout<<A <<endl;
    //Prints the address of the variable A.
    cout<<&A <<endl;

    /*
        1. Variables cant have the same name.
        2. Variable name cant start with a number.
        3. Variable name should not contain spaces.
        4. Variable name should be self-descriptive.
        5. Variable name can't have special characters or keywords.
    */

    //Re-initialization of A.
    A=10;
    cout<<A <<endl;
    cout<<&A;
}

该代码主要执行以下操作:

  1. 声明一个名为 A 的整数类型变量,并将其初始化为 4。在 C++ 中,int 类型通常占用 4 个字节的内存空间。
  2. 使用 cout 语句输出变量 A 的值,即 4
  3. 使用 cout 语句输出变量 A 的地址,即变量在内存中的位置。
  4. 通过注释的方式,列出了一些关于变量命名的规则和注意事项。
  5. 重新初始化变量 A 的值为 10
  6. 使用 cout 语句再次输出变量 A 的值,即 10
  7. 最后,再次使用 cout 语句输出变量 A 的地址。

代码解析完毕。

基本概念:

C++变量是一种在程序中存储数据的机制。变量是用于存储和操作数据的标识符。以下是C++变量的详细介绍:

  1. 变量的命名:变量名可以是字母、数字、下划线,并且必须以字母或下划线开头。变量名通常使用驼峰命名法或下划线命名法。
  2. 变量的类型:变量在声明时必须指定其类型。C++有许多内置类型,包括整数、浮点数、字符、布尔等。此外,还可以使用自定义类型,如结构体、类等。
  3. 变量的声明:在C++中,必须在程序中使用变量之前声明它们。声明告诉编译器变量的名称和类型,以便编译器知道如何为变量分配内存空间。
  4. 变量的赋值:在声明变量后,必须将其初始化为一个值。可以使用赋值运算符(=)将值赋给变量。
  5. 变量的作用域:变量的作用域是指变量在程序中的可见性和生命周期。C++中有两种类型的作用域:局部和全局。局部作用域限制了变量的可见性和生命周期,只能在定义它的代码块中使用。全局作用域使得变量在整个程序中都可见。
  6. 常量:常量是变量的特殊类型,表示一个不可变的值。在C++中,使用关键字const来声明常量。
  7. 变量的类型转换:在C++中,可以进行隐式类型转换和显式类型转换。隐式类型转换发生在编译器自动将一种类型的值转换为另一种类型时,例如将整数转换为浮点数。显式类型转换使用类型转换运算符(如static_castdynamic_cast等)来显式地将一个类型的值转换为另一个类型。

以上是C++变量的详细介绍,掌握这些概念对于编写高效的C++程序非常重要。

C++14是C++语言的最新标准,它引入了一些关于变量的新特性和改进。以下是一些关于C++14中变量的详细介绍:

  1. auto关键字:C++14引入了auto关键字,用于自动推断变量的类型。使用auto关键字可以简化变量的类型声明,特别是在使用复杂表达式或嵌套容器时。

  2. 列表初始化和变量声明:C++14支持使用花括号({})进行列表初始化,可以直接将初始值赋给变量,无需使用赋值运算符。例如:

 

cpp复制代码

int a = {10};
std::string str = {"Hello World"};
  1. 初始化列表的构造器:C++14引入了初始化列表构造器,允许在类的构造函数中使用初始化列表来初始化成员变量。例如:

 

cpp复制代码

class MyClass {
public:
MyClass(int a, int b) : m_a(a), m_b(b) {}
private:
int m_a;
int m_b;
};
  1. 通用委托表达式:C++14引入了通用委托表达式(Generalized Delegate Expressions),允许使用更灵活的表达式来构造委托表达式。
  2. 静态断言:C++14引入了静态断言(Static Assert),用于在编译时检查条件是否满足。如果条件不满足,编译器将产生错误或警告。
  3. 右值引用和移动语义:C++14引入了右值引用(Rvalue Reference)和移动语义(Move Semantics),以优化资源的管理和性能。

以上是C++14中关于变量的详细介绍。这些新特性和改进提高了代码的可读性和性能,使C++更加现代化和灵活。

C++20是C++语言的最新标准,引入了一些关于变量的新特性和改进。以下是一些关于C++20中变量的详细介绍:

  1. 类型推断和auto关键字:C++20扩展了类型推断的功能,使得变量声明时可以省略变量名的类型,而只使用变量名即可。这使得代码更加简洁易读。

 

cpp复制代码

auto x = 10; // 推断x的类型为int
auto v = {1, 2, 3}; // 推断v的类型为std::initializer_list<int>
  1. 结构化绑定:C++20引入了结构化绑定(Structured Binding),允许将一个结构体或联合体的成员变量直接分配给多个变量。

 

cpp复制代码

struct Point {
int x;
int y;
};
Point p;
auto [x, y] = p; // 将p的x和y成员变量分配给x和y变量
  1. 范围for循环:C++20引入了范围for循环(Range-based for loop),允许在for循环中直接遍历容器或数组的元素。

 

cpp复制代码

int arr[] = {1, 2, 3, 4, 5};
for (int elem : arr) {
// 直接访问arr的每个元素
std::cout << elem << std::endl;
}
  1. 初始化列表的构造器:C++20继续支持初始化列表构造器,允许在类的构造函数中使用初始化列表来初始化成员变量。
  2. concept关键字:C++20引入了concept关键字,用于定义类型的概念,用于约束模板参数的类型。这有助于提高代码的可读性和可维护性。
  3. if constexpr和if let:C++20引入了if constexpr和if let,用于在编译时条件判断和模式匹配,有助于编写更加简洁和高效的代码。
  4. coroutines:C++20引入了协程(Coroutines),这是一种控制流机制,允许函数在执行过程中暂停执行并将控制权返回给调用者,然后在某个特定点重新进入执行。协程可以用于实现异步编程、生成器等功能。

以上是C++20中关于变量的详细介绍。这些新特性和改进进一步提高了代码的可读性和性能,使C++更加现代化和灵活。


Arduino

int A = 4;  // 声明一个整数类型的变量 A,并初始化为 4  
  
void setup() {  
  Serial.begin(9600);  // 初始化串口通信,波特率为 9600  
}  
  
void loop() {  
  Serial.print(A);  // 输出变量 A 的值到串口  
  Serial.print(" ");  // 输出一个空格  
  Serial.print(&A);  // 输出变量 A 的地址到串口  
  Serial.println();  // 输出一个换行符  
  
  delay(1000);  // 延时 1 秒  
  
  A = 10;  // 重新初始化变量 A 的值为 10  
}

在 Arduino IDE 中,可以通过串口监视器来查看输出结果。在 loop() 函数中,每次输出变量 A 的值、地址和重新初始化 A 的值后,都使用 delay(1000) 来延时 1 秒,以便观察输出结果的变化。


ROS1

#include <ros/ros.h>  
  
int main(int argc, char **argv)  
{  
    // 初始化ROS节点  
    ros::init(argc, argv, "my_node");  
  
    // 创建ROS节点句柄  
    ros::NodeHandle nh;  
  
    // 声明一个整数类型变量A,分配4个字节的内存空间  
    int A = 4;  
  
    // 发布变量A的值到"chatter"话题  
    ros::Publisher chatter_pub = nh.advertise<std_msgs::Int32>("chatter", 1000);  
  
    // 创建标准消息类型:整数类型(32位)  
    std_msgs::Int32 msg;  
    msg.data = A;  
  
    // 发布消息到"chatter"话题  
    ros::Rate loop_rate(1);  
    while (ros::ok()) {  
        msg.data = A;  
        chatter_pub.publish(msg);  
        ros::spinOnce();  
        loop_rate.sleep();  
    }  
  
    return 0;  
}

上述代码是一个用于ROS1的C++节点,它使用了ROS的C++库。以下是代码的详细解释:

  1. #include <ros/ros.h>: 引入ROS的命名空间和头文件,这些文件包含了ROS中使用的各种函数和类。
  2. using namespace std;: 引入std命名空间,这样我们就可以直接使用标准库中的函数和对象,而无需在每个前面加上std::
  3. int main(int argc, char **argv): 主函数,程序的执行从这里开始。它接受两个参数:命令行参数的数量(argc)和命令行参数的值(argv)。
  4. ros::init(argc, argv, "my_node"): 初始化ROS节点。这是ROS中每个节点必须做的第一步。它接受三个参数:命令行参数的数量和值,以及该节点的名称。
  5. ros::NodeHandle nh;: 创建一个节点句柄对象nh。节点句柄是ROS中非常重要的对象,它提供了与ROS系统的通信接口。
  6. ros::Publisher chatter_pub = nh.advertise<std_msgs::Int32>("chatter", 1000);: 使用节点句柄创建一个名为chatter_pub的发布者对象,并使用advertise函数将其与名为"chatter"的话题关联起来。该发布者将使用std_msgs::Int32消息类型发布消息。第二个参数是发布者队列的大小,这里设置为1000。
  7. std_msgs::Int32 msg;: 创建一个名为msgstd_msgs::Int32消息对象,用于发布到"chatter"话题。
  8. msg.data = A;: 设置消息对象msg的数据字段为变量A的值。
  9. chatter_pub.publish(msg);: 使用发布者对象chatter_pub发布消息对象msg到"chatter"话题。
  10. ros::Rate loop_rate(1);: 创建一个名为loop_rate的速率对象,并将其设置为每秒发布一次消息(因为参数为1)。
  11. while (ros::ok()): 创建一个循环,当ROS系统正常运行时,该循环会一直执行。
  12. ros::spinOnce();: 执行一次ROS的Spin主循环,用于处理来自ROS系统的消息和调用回调函数。
  13. loop_rate.sleep();: 调用速率对象的sleep函数,暂停执行一段时间以保持发布频率为每秒一次。
  14. return 0;: 返回0表示程序成功执行结束。

总的来说,该代码创建了一个ROS节点,它周期性地发布一个整数变量A到名为"chatter"的话题中。它使用了ROS的核心组件,包括节点句柄、发布者和消息类型,以实现与ROS系统的交互。


……


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/861018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…

【校招VIP】java语言考点之static和并发

考点介绍&#xff1a; static考点是面试的高频考点&#xff0c;很多同学不理解使用场景&#xff0c;只是从加载出发。 一般从容易到难提问&#xff0c;比如从static的含义和理解、到JVM的存储或者到线程安全性&#xff0c;再到单例模式等。 java语言考点之static和并发 相关题…

Python web实战之Django 的缓存机制详解

关键词&#xff1a;Python、Web 开发、Django、缓存 1. 缓存是什么&#xff1f;为什么需要缓存&#xff1f; 在 Web 开发中&#xff0c;缓存是一种用于存储数据的临时存储区域。它可以提高应用程序的性能和响应速度&#xff0c;减轻服务器的负载。 当用户访问网页时&#xff…

竞赛项目 深度学习的智能中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

[Kubernetes]Kubeflow Pipelines - 基本介绍与安装方法

1. 背景 近些年来&#xff0c;人工智能技术在自然语言处理、视觉图像和自动驾驶方面都取得不小的成就&#xff0c;无论是工业界还是学术界大家都在惊叹一个又一个的模型设计。但是对于真正做过算法工程落地的同学&#xff0c;在惊叹这些模型的同时&#xff0c;更多的是在忧虑如…

React使用antd的图片预览组件,点击哪个图片就预览哪个的设置

使用了官方推荐的相册模式的预览&#xff0c;但是点击预览之后&#xff0c;每次都是从图片列表的第一张开始预览&#xff0c;而不是点击哪张就从哪张开始预览&#xff1a; 所以这里我就封装了一下&#xff0c;对初始化预览的列表进行了逻辑处理&#xff1a; 当点击开始预览的…

分析 Linux 启动流程基本实现

下载 Linux 内核网址&#xff1a; https://www.kernel.org/ 最新 Linux 内核是 5.15 版本。现在常用 Linux 内核源码为4.14、4.19、4.9 等版本&#xff0c;其中 4.14 版本源码压缩包大概 90M&#xff0c;解压后 700M&#xff0c;合计 61350 个文件。如此众多的文件&#xff0…

【前端 | CSS】盒模型clientWidth、clientHeight、offsetWidht、offsetHeight

图 先看一个例子 html <div class"container"><div class"item">内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容</div> </…

C++ 混合Python编程 及 Visual Studio配置

文章目录 需求配置环节明确安装的是64位Python安装目录 创建Console C ProjectCpp 调用 Python Demo 参考 需求 接手了一个C应用程序&#xff0c;解析csv和生成csv文件&#xff0c;但是如果要把多个csv文件合并成一个Excel&#xff0c;分布在不同的Sheet中&#xff0c;又想在一…

3D Web轻量化引擎HOOPS Communicator如何实现对BIM桌面端的支持?

HOOPS Communicator是一款简单而强大的工业级高性能3D Web轻量化渲染开发包&#xff0c;其主要应用于Web领域&#xff0c;主要加载其专有的SCS、SC、SCZ格式文件&#xff1b;HOOPS还拥有另一个桌面端开发包HOOPS Visualize&#xff0c;主要加载HSF、HMF轻量化格式文件。两者虽然…

Ant Design Vue 下拉框输入框 可以输入 可以查询

Ant Design Vue 下拉框 可以输入 可以查询 直接上代码 效果图 &#xff08;输入内容查询后端 返回下拉的值 &#xff0c;如何查询后端是空的直接 把输入的内容 赋值给 输入框&#xff09; 在这里插入图片描述 <template><div><a-selectv-model.lazy"i…

网络服务之DHCP

DHCP 一.了解DHCP1.1 DHCP是什么1.2DHCP好处1.3DHCP 的分配方式1.4DHCP一次完整过程1.5 DHCP报文 二.Linux系统中的DHCP2.1安装DHCP服务2.2配置文件 三.模拟实现DHCP服务四.虚拟内网环境中实现时间同步 一.了解DHCP 1.1 DHCP是什么 DHCP&#xff1a;动态主机配置协议&#xf…

Vue中data变量使用的注意事项

因为在Vue中&#xff0c;data中的属性往往都是用于双向绑定&#xff0c;所以Vue会对其有劫持&#xff0c;所以我们在对data属性进行操作时&#xff0c;尽量不要对其直接操作&#xff0c;比如下面代码&#xff1a; export default {data() {return {list: []}},methods: {init(…

Oracle 开发篇+Java调用OJDBC访问Oracle数据库

标签&#xff1a;JAVA语言、Oracle数据库、Java访问Oracle数据库释义&#xff1a;OJDBC是Oracle公司提供的Java数据库连接驱动程序 ★ 实验环境 ※ Oracle 19c ※ OJDBC8 ※ JDK 8 ★ Java代码案例 package PAC_001; import java.sql.Connection; import java.sql.ResultSet…

易服客工作室:WordPress 6.3 Lionel发布

WordPress 6.3 Lionel已经发布&#xff0c;它以美国著名爵士乐艺术家莱昂内尔汉普顿 (Lionel Hampton)的名字命名。汉普顿是一位多产的爵士颤音琴演奏家、钢琴家和打击乐演奏家&#xff0c;因与查尔斯明格斯、昆西琼斯等伟大人物合作以及作为同名莱昂内尔汉普顿管弦乐团的乐队领…

SpringBoot 3.x整合Fluent Mybatis极简流程

此为基础配置&#xff0c;不包括其他高级配置&#xff0c;需要其他高级配置请查阅官方文档&#xff1a;[fluent mybatis特性总览 - Wiki - Gitee.com](https://gitee.com/fluent-mybatis/fluent-mybatis/wikis/fluent mybatis特性总览) 版本信息 Spring Boot 版本&#xff1a…

【项目 计网4】4.11 socket地址 4.12 IP地址转换函数 4.13TCP通信流程 4.14socket函数

文章目录 4.11 socket地址通用 socket地址专用 socket地址 4.12 IP地址转换函数&#xff08;字符串ip -> 整数&#xff09;4.13TCP通信流程4.14socket函数 4.11 socket地址 socket地址其实是一个结构体&#xff0c;封装端口号和IP等信息。后面的socket相关的api中需要使用到…

Eolink 出席 QECon 大会,引领「AI+API」技术的革新浪潮

7月28日-29日&#xff0c;第八届 QECon 质量效能大会在北京成功召开。大会聚焦“数生智慧&#xff0c;高质量发展新引擎”&#xff0c;深入探讨如何利用数字化和智能化技术推动软件质量的发展&#xff0c;进而为高质量的经济发展提供新的引擎。作为国内 API 全生命周期解决方案…

【计算机组成原理】24王道考研笔记——第三章 存储系统

第三章 存储系统 一、存储系统概述 现代计算机的结构&#xff1a; 1.存储器的层次结构 2.存储器的分类 按层次&#xff1a; 按介质&#xff1a; 按存储方式&#xff1a; 按信息的可更改性&#xff1a; 按信息的可保存性&#xff1a; 3.存储器的性能指标 二、主存储器 1.基本…

Oracle database 静默安装 oracle 11g 一键安装

基于oracle安装包中应答文件实现一键安装 支持环境&#xff1a; Linux &#xff1a;centerOS 7 oracle &#xff1a;11.2.0 Oracle应答文件 runInstaller应答文件 /database/response/db_install.rsp netca应答文件 /database/response/netca.rsp dbca应答文件 /database/re…