C++基础学习一(基础之基础)

开篇:做了这么多年的软件,第一次使用博客的方式记录学习过程,之前都是笔记本(都有一摞了),因为之前一直从事的都是.NET的开发工作,对C++知之甚少,但一直想了解C++这门鼻祖级的语言,现在终于下定决心、腾出时间,系统的学习一下,因为有了丰富的编程经验,所以不再记录安装编程环境之类的事项直接进行编程语言的学习,当然开发环境还是选用一直在使用并非常熟悉及熟练的visual studio,我现在用的是visual studio 2017,那就用visual studio 2017作为编程工具开始学习C++。

下面就开始学习吧,首先前年不变的Hello World

#include <iostream>
using namespace std;
// main() 是程序开始执行的地方
int main()
{cout << "Hello World"; // 输出 Hello Worldreturn 0;
}

 在 C++ 中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。

C++ 关键字

下表列出了 C++ 中的保留字。这些保留字不能作为常量名、变量名或其他标识符名称。

asmelsenewthis
autoenumoperatorthrow
boolexplicitprivatetrue
breakexportprotectedtry
caseexternpublictypedef
catchfalseregistertypeid
charfloatreinterpret_casttypename
classforreturnunion
constfriendshortunsigned
const_castgotosignedusing
continueifsizeofvirtual
defaultinlinestaticvoid
deleteintstatic_castvolatile
dolongstructwchar_t
doublemutableswitchwhile
dynamic_castnamespacetemplate 

C++ 如何注释

程序的注释是解释性语句,您可以在 C++ 代码中包含注释,这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。

C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。

C++ 注释以 /* 开始,以 */ 终止。例如:

/* 这是注释 */ /* C++ 注释也可以 * 跨行 */

C++ 数据类型

基本的内置类型

C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型。下表列出了七种基本的 C++ 数据类型:

类型关键字
布尔型bool
字符型char
整型int
浮点型float
双浮点型double
无类型void
宽字符型wchar_t

一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed
  • unsigned
  • short
  • long

下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。

注意:不同系统会有所差异。

类型范围
char1 个字节-128 到 127 或者 0 到 255
unsigned char1 个字节0 到 255
signed char1 个字节-128 到 127
int4 个字节-2147483648 到 2147483647
unsigned int4 个字节0 到 4294967295
signed int4 个字节-2147483648 到 2147483647
short int2 个字节-32768 到 32767
unsigned short int2 个字节0 到 65,535
signed short int2 个字节-32768 到 32767
long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int8 个字节0 to 18,446,744,073,709,551,615
float4 个字节+/- 3.4e +/- 38 (~7 个数字)
double8 个字节+/- 1.7e +/- 308 (~15 个数字)
long double16 个字节+/- 1.7e +/- 308 (~15 个数字)
wchar_t2 或 4 个字节1 个宽字符

从上表可得知,变量的大小会根据编译器和所使用的电脑而有所不同。

下面实例会输出您电脑上各种数据类型的大小。

#include<iostream>  
#include<string>  
#include <limits>  
using namespace std;  int main()  
{  cout << "type: \t\t" << "************size**************"<< endl;  cout << "bool: \t\t" << "所占字节数:" << sizeof(bool); cout << "\t最大值:" << (numeric_limits<bool>::max)(); cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl; cout << "char: \t\t" << "所占字节数:" << sizeof(char); cout << "\t最大值:" << (numeric_limits<char>::max)(); cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl; cout << "signed char: \t" << "所占字节数:" << sizeof(signed char); cout << "\t最大值:" << (numeric_limits<signed char>::max)(); cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl; cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char); cout << "\t最大值:" << (numeric_limits<unsigned char>::max)(); cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl; cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t); cout << "\t最大值:" << (numeric_limits<wchar_t>::max)(); cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl; cout << "short: \t\t" << "所占字节数:" << sizeof(short); cout << "\t最大值:" << (numeric_limits<short>::max)(); cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl; cout << "int: \t\t" << "所占字节数:" << sizeof(int); cout << "\t最大值:" << (numeric_limits<int>::max)(); cout << "\t最小值:" << (numeric_limits<int>::min)() << endl; cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned); cout << "\t最大值:" << (numeric_limits<unsigned>::max)(); cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl; cout << "long: \t\t" << "所占字节数:" << sizeof(long); cout << "\t最大值:" << (numeric_limits<long>::max)(); cout << "\t最小值:" << (numeric_limits<long>::min)() << endl; cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long); cout << "\t最大值:" << (numeric_limits<unsigned long>::max)(); cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl; cout << "double: \t" << "所占字节数:" << sizeof(double); cout << "\t最大值:" << (numeric_limits<double>::max)(); cout << "\t最小值:" << (numeric_limits<double>::min)() << endl; cout << "long double: \t" << "所占字节数:" << sizeof(long double); cout << "\t最大值:" << (numeric_limits<long double>::max)(); cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl; cout << "float: \t\t" << "所占字节数:" << sizeof(float); cout << "\t最大值:" << (numeric_limits<float>::max)(); cout << "\t最小值:" << (numeric_limits<float>::min)() << endl; cout << "size_t: \t" << "所占字节数:" << sizeof(size_t); cout << "\t最大值:" << (numeric_limits<size_t>::max)(); cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl; cout << "string: \t" << "所占字节数:" << sizeof(string) << endl; // << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl; cout << "type: \t\t" << "************size**************"<< endl; return 0; }

本实例使用了 endl,这将在每一行后插入一个换行符,<< 运算符用于向屏幕传多个值。我们也使用 sizeof() 函数来获取各种数据类型的大小。

当上面的代码被编译和执行时,它会产生以下的结果,结果会根据所使用的计算机而有所不同:

type:         ************size************** bool:         所占字节数:1    最大值:1        最小值:0 char:         所占字节数:1    最大值:        最小值:? signed char:     所占字节数:1    最大值:        最小值:? unsigned char:     所占字节数:1    最大值:?        最小值: wchar_t:     所占字节数:4    最大值:2147483647        最小值:-2147483648 short:         所占字节数:2    最大值:32767        最小值:-32768 int:         所占字节数:4    最大值:2147483647    最小值:-2147483648 unsigned:     所占字节数:4    最大值:4294967295    最小值:0 long:         所占字节数:8    最大值:9223372036854775807    最小值:-9223372036854775808 unsigned long:     所占字节数:8    最大值:18446744073709551615    最小值:0 double:     所占字节数:8    最大值:1.79769e+308    最小值:2.22507e-308 long double:     所占字节数:16    最大值:1.18973e+4932    最小值:3.3621e-4932 float:         所占字节数:4    最大值:3.40282e+38    最小值:1.17549e-38 size_t:     所占字节数:8    最大值:18446744073709551615    最小值:0 string:     所占字节数:24 type:         ************size**************

typedef 声明

您可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:

typedef type newname;

例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:
typedef int feet;

现在,下面的声明是完全合法的,它创建了一个整型变量 distance:
feet distance;

枚举类型

枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。

如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。

创建枚举,需要使用关键字 enum。枚举类型的一般形式为:

enum 枚举名{ 标识符[=整型常数], 标识符[=整型常数], ... 标识符[=整型常数] } 枚举变量;

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。

例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 "blue"。

enum color { red, green, blue } c; c = blue;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。
enum color { red, green=5, blue };
在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。

C++ 中的变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:

type variable_list;

在这里,type 必须是一个有效的 C++ 数据类型,可以是 char、wchar_t、int、float、double、bool 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。下面列出几个有效的声明:
int i, j, k; 
char c, ch; 

float f, salary;

double d;

行 int i, j, k; 声明并定义了变量 i、j 和 k,这指示编译器创建类型为 int 的名为 i、j、k 的变量。

变量可以在声明的时候被初始化(指定一个初始值)。初始化器由一个等号,后跟一个常量表达式组成,如下所示:

type variable_name = value;

下面列举几个实例:

extern int d = 3, f = 5; // d 和 f 的声明  

int d = 3, f = 5; // 定义并初始化 d 和 f

byte z = 22; // 定义并初始化 z

char x = 'x'; // 变量 x 的值为 'x'
不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。

C++ 中的变量声明

变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

当您使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。您可以使用 extern关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。

实例

尝试下面的实例,其中,变量在头部就已经被声明,但它们是在主函数内被定义和初始化的:
#include <iostream>
using namespace std;
// 变量声明
extern int a, b;
extern int c;
extern float f;
int main ()
{// 变量定义int a, b;   int c;   float f;   // 实际初始化   a = 10;   b = 20;   c = a + b;   cout << c << endl ;   f = 70.0/3.0;   cout << f << endl ;   return 0; }

 当上面的代码被编译和执行时,它会产生下列结果:

30
23.3333

同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。例如:
// 函数声明
int func();
int main()
{// 函数调用int i = func();
}
// 函数定义
int func()
{return 0;
}

C++ 中的左值(Lvalues)和右值(Rvalues)

C++ 中有两种类型的表达式:

  • 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
  • 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:

int g = 20;

但是下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20;

转载于:https://www.cnblogs.com/derekhan/p/9886688.html

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

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

相关文章

二叉树的遍历方式

2019独角兽企业重金招聘Python工程师标准>>> 二叉树遍历方式有三种&#xff1a;前序遍历&#xff0c;中序遍历&#xff0c;后序遍历&#xff08;其实还有一个层序遍历&#xff09; 使用两种方式来实现三种遍历&#xff1a; 1. 使用递归的方式实现 1&#xff09;&…

非常恶俗地分享一首歌曲(子陵·周郎顾)

歌词 [hjp3]hjptypesong&player5&filehttp://file.hjbbs.com/ayi/share/mp3/zhoulanggu.mp3&backColor990000&frontColorddddff&autoStarttrue&showDownloadtrue&width310&height20[/hjp3]子陵周郎顾 绿绮轻拂刹那玄冰破&#xff0c; 九霄仙音…

that is why用法

释义&#xff1a;这就是为什么&#xff0c;因此 Thats why I was getting married. ---《老友记》 第一季 第一集 这就是我为什么结婚的原因。 例句&#xff1a; Mr. Gorbachev, on the other hand, recognized that his sluggish and authoritarian bureaucracy was the worst…

阿里云超算集谛优化GPU异构并行性能:GROMACS

“集谛”是一款内置于阿里云弹性高性能计算(Elastic High Performance Computing&#xff0c;E-HPC)的云上性能监控与分析引擎&#xff0c;支持集群资源利用情况的实时监控和用户作业运行情况的在线分析。对于采用GPU加速的异构计算应用场景&#xff0c;“集谛”除了监控节点ho…

日本常用网址

1.Yahoo&#xff01;Japan http://www.yahoo.co.jp 2.价格.com http://www.kakaku.com 购买商品前必看的网站&#xff0c;不仅仅是为了得到相对最低的价格信息&#xff0c;更重要的是获取关于同类商品不同品牌型号的评价和比较。 3.乐天 http://www.rakuten.co.jp 日本最…

MySQl看这一篇就够了

MySQl看这一篇就够了 MySQL分享 一、数据库结构 语句 DDL&#xff08;Data Definition Languages&#xff09;&#xff1a;数据定义语句&#xff0c;常用的语句关键字主要包括 create、drop、alter等操作表结构 DML&#xff08;Data Manipulation Language&#xff09;&#xf…

IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)

JetBrains公司的intellij Idea堪称JAVA编程界的苹果&#xff0c;用户体验非常好 下面介绍一下IDEA的一个能显著提升写代码效率的非常好用的功能设置—— Auto Import Auto Import的功能是可以帮助我们自动删除无用的包Import(未被引用)&#xff0c;以及自动Import填充尚未导入的…

怎么看网站是否被黑防止网站被黑

2019独角兽企业重金招聘Python工程师标准>>> 网站被黑&#xff0c;打开网站竟然跳转到博cai网站上去了&#xff0c;一开始以为自己看错了&#xff0c;多次从百度点击自己网站进去&#xff0c;还是会跳转到彩piao网站上&#xff0c;第一反应是自己的网站被黑了&#…

c#事务的使用、示例及注意事项

一、事务的介绍.NET Framework 开发员指南事务是一组组合成逻辑工作单元的操作&#xff0c;虽然系统中可能会出错&#xff0c;但事务将控制和维护事务中每个操作的一致性和完整性。例如&#xff0c;在将资金从一个帐户转移到另一个帐户的银行应用中&#xff0c;一个帐户将一定的…

镜像服务器文件实时监控同步程序

这是为我们网站解决南北电信网通互联互通问题而写的一个程序。 优游中国(www.yooyocn.com)是一个大型旅游门户网站&#xff0c;提供了资讯&#xff0c;视频&#xff0c;图片&#xff0c;博客&#xff0c;论坛等大数据量的业务内容。 为了使全国各地的网友都能够快速访问我们的网…

Nginx学习系列二Linux下Nginx实现负载均衡

关于在本地虚拟机(VMware 14)下安装Linux同时安装Nginx,请参考Nginx学习系列之搭建环境 1、启动Nginx 在Nginx安装成功的前提下,启动Nginx 已root模式登陆(权限需要),接着找到Nginx的安装目录,启动Nginx,并且指定Nginx启动所需的配置文件,该文件也在Nginx的安装目录下. 2、查看…

FastCGI中文规范

http://fuzhong1983.blog.163.com/blog/static/1684705201051002951763/ . 介绍 FastCGI是对CGI的开放的扩展&#xff0c;它为所有因特网应用提供高性能&#xff0c;且没有Web服务器API的缺点&#xff08;penalty&#xff09;。 本规范具有有限的&#xff08;narrow&#xff09…

设计模式初学者系列-策略模式 -------为什么总是继承

设计模式初学者系列&#xff0d;策略模式 -------为什么总是继承 模板方法的延续 这篇稿子是基于我的前一篇模板方法设计模式之上演绎的&#xff0c;如果没有阅读请点击这里查看&#xff0c;以了解这篇稿子的上下文。 在模板方法设计模式里我举了一个例子&#xff1a;教育部…

红米airdots掉了怎么查找_红米K30 Pro 荣耀V30pro 这两款手机该怎么选呢?

点击?玩机数码君?关注我&#xff0c;加★星标★你好 我是岁月神偷昨天可以说是小米拍手称快的一天&#xff0c;红米K30 Pro以2999的超低价成为目前最便宜的骁龙865旗舰&#xff0c;让友商拍马难追。友商明眼人都知道说的华为&#xff0c;怎么感觉小米每次发布会也替华为宣传了…

返回一个循环整数组最大子数组和

任务要求&#xff1a; 1、输入一个整形数组&#xff0c;数组里有正数也有负数。 2、数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。 3、如果数组A[0]……A[j-1]首尾相邻&#xff0c;允许A[i-1]&#xff0c; …… A[n-1]&#xff0c; A[0]……A…

中文分词入门之字标注法4

http://www.52nlp.cn/%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E5%85%A5%E9%97%A8%E4%B9%8B%E5%AD%97%E6%A0%87%E6%B3%A8%E6%B3%954 上一节主要介绍的是利用最大熵工具包来做字标注中文分词&#xff0c;这一节我们直奔主题&#xff0c;借用条件随机场工具“CRF: Yet Another CRF …

后台设置 datakeynames

FormView2.DataKeyNames new String[] { "ShoppingRemarkID" }; 转载于:https://www.cnblogs.com/Fernando/archive/2008/01/16/1041717.html

4K 海思 联咏 芯片_老电视也有春天,换装海美迪4K电视盒子H7 Plus

写在前面YALL&#xff0c;大家好&#xff0c;我是老炮儿许老板。疫情进入六月逐渐好转&#xff0c;各级各类学校相继开学&#xff0c;年前给儿子报的托班也终于迎来了开学&#xff0c;平日里帮忙照看儿子的爷爷奶奶也终于得到了解放。现在白天有大把大把的时间来追剧看电视&…

知识付费不热了,得到们接下来故事怎么讲?

如今&#xff0c;知识付费风口已过&#xff0c;红利期随之在逐渐消失&#xff0c;很多知识付费的创业者也在感叹生意难做&#xff0c;甚至有人已经开始离场。比如&#xff0c;百度音频知识付费产品只生存了6个月&#xff0c;最后的更新时间则停在7月13日。再如&#xff0c;在分…

I'm genius,用游戏柄控制鼠标

昨天不小心把鼠标放在店里没有带回来&#xff0c;今天电脑就没有鼠标了&#xff0c;用了很久的键盘&#xff0c;实在不爽&#xff0c;就突然发现自己有一个游戏柄&#xff0c;后来到网上查了一下怎么用游戏柄控制鼠标&#xff0c;呵呵&#xff0c;发现了一个&#xff0c;下载用…