C++ 学习(二)变量、常量、关键字、标识符命名规则、数据类型

21 篇文章 11 订阅

变量

作用:给一段指定的内存空间起名,方便管理这段内存空间

常量

作用:记录程序中不可更改的数据,即只读数据

C++变量与常量

变量

语法:数据类型 变量名 = 变量初始值;

常量

两种定义方式:

1、 #define 宏常量:   #define 常量名 常量值   (定义在文件的上方;注:结尾没有分号

      宏定义的常量没有类型,它是在编译前(预编译阶段)进行字符替换,同时没有类型的安全检查,系统也不会为它分配内存,因此宏常量地址是不能被访问的。

2、 const修饰的变量:const 数据类型 常量名 = 常量值;

#include <iostream>
using namespace std;

//宏常量: #define 常量名 常量值 (注:结尾没有分号)
#define Path "F:/"

int main()
{
	//变量:数据类型 变量名 = 变量初始值;
	int age = 20;
	cout << "变量 age = " << age << endl;

	cout << "宏常量 Path = " << Path << endl;

	//常量:const修饰的变量 => const 数据类型 常量名 = 常量值;
	const int MaxValue = 1000;
	cout << "常量 MaxValue = " << MaxValue << endl;

	system("pause");

	return 0;
}

 Go语言变量与常量

Go语言中,常量地址是不允许访问的

package main

import "fmt"

//常量定义在函数外面
const Path = "F:/"

func main() {
	//变量
	var age int = 20;
	fmt.Println("变量 age = ", age)
	fmt.Println("常量 Path = ", Path)

	//常量定义在函数内部
	const MaxValue = 1000
	fmt.Println("常量 MaxValue = ", MaxValue)

	//Go语言,常量地址是不允许访问的,下面写法语义会报错
	//fmt.Printf("常量地址 MaxValue = %p", &MaxValue)
}

关键字

关键字是预先保留的单词。

在给变量或常量起名时,不要使用关键字,否则会产生歧义。

C++关键字

asmautobad _castbad _typeid
boolbreakcasecatch
charclassconstconst _cast
continuedefaultdeletedo
doubledynamic _castelseenum
exceptexplicitexternfalse
finallyfloatforfriend
gotoifinlineint
longmutablenamespacenew
operatorprivateprotectedpublic
registerreinterpret _castreturnshort
signedsizeofstaticstatic _cast
structswitchtemplatethis
throwtruetrytype _info
typedeftypeidtypenameunion
unsignedusingvirtualvoid
volatilewchar_twchar_t

Go语言关键字与预定义标识符

25个关键字 

breakdefault funcinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

36个预定义标识符 

appendboolbytecapclosecomplexcomplex64complex128uint16
copyfalsefloat32float64imagintint8int16uint32
int32int64iotalenmakenewnilpanicuint64
printprintlnrealrecoverstringtrueuintuint8uintptr

标识符命名规则

不能是关键字

只能由字母、数字 、下划线组成

第一个字符必须为字母或下划线

字母区分大小写

给变量起名时最好是见名知意。

Go语言标识符命名规则 与 C++ 相同。

数据类型

给变量分配合适的内存空间

整型

C++整型

数据类型占用空间取值范围
short2字节-2^{15} ~ 2^{15}-1
int4字节-2^{31} ~ 2^{31}-1
long

windows 4字节;

linux32位为4字节,linux64位为8字节

-2^{31} ~ 2^{31}-1
long long8字节-2^{63} ~ 2^{63}-1

Go语言整型

数据类型占用空间取值范围
int81字节-128 ~ 127
int162字节-2^{15} ~ 2^{15}-1
int324字节-2^{31} ~ 2^{31}-1
int648字节-2^{63} ~ 2^{63}-1
int32位操作系统为4字节,64位操作系统为8字节

-2^{31} ~ 2^{31}-1

-2^{63} ~ 2^{63}-1

uint81字节0 ~ 255
uint162字节0 ~ 2^{16}-1
uint324字节0 ~ 2^{32}-1
uint648字节0 ~ 2^{64}-1
uint32位操作系统为4字节,64位操作系统为8字节

0 ~  2^{32}-1

0 ~ 2^{64}-1

内存大小

C++ sizeof关键字

统计数据类型所占内存大小。

语法:sizeof(数据类型 或 变量)

#include <iostream>
using namespace std;

int main()
{
	short n1 = 10;
	int n2 = 10;
	long n3 = 10;
	long long n4 = 10;

	//sizeof
	cout << "short占用内存空间 = " << sizeof(short) << endl;
	cout << "short类型变量n1占用内存空间 = " << sizeof(n1) << endl;

	cout << "int占用内存空间 = " << sizeof(int) << endl;
	cout << "int类型变量n2占用内存空间 = " << sizeof(n2) << endl;

	cout << "long占用内存空间 = " << sizeof(long) << endl;
	cout << "long类型变量n3占用内存空间 = " << sizeof(n3) << endl;

	cout << "long long占用内存空间 = " << sizeof(long long) << endl;
	cout << "long long类型变量n4占用内存空间 = " << sizeof(n4) << endl;

	system("pause");

	return 0;
}

 运行结果

short占用内存空间 = 2
short类型变量n1占用内存空间 = 2
int占用内存空间 = 4
int类型变量n2占用内存空间 = 4
long占用内存空间 = 4
long类型变量n3占用内存空间 = 4
long long占用内存空间 = 8
long long类型变量n4占用内存空间 = 8

Go语言 unsafe.Sizeof(变量名)

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var n1 int8 = 10
	var n2 int16 = 10
	var n3 int32 = 10
	var n4 int64 = 10
	var n5 int = 10

	var u1 uint8 = 10
	var u2 uint16 = 10
	var u3 uint32 = 10
	var u4 uint64 = 10
	var u5 uint = 10

	fmt.Println("int8类型变量n1占用内存空间 = ", unsafe.Sizeof(n1))
	fmt.Println("int16类型变量n2占用内存空间 = ", unsafe.Sizeof(n2))
	fmt.Println("int32类型变量n3占用内存空间 = ", unsafe.Sizeof(n3))
	fmt.Println("int64类型变量n4占用内存空间 = ", unsafe.Sizeof(n4))
	fmt.Println("int类型变量n5占用内存空间 = ", unsafe.Sizeof(n5))

	fmt.Println("uint8类型变量u1占用内存空间 = ", unsafe.Sizeof(u1))
	fmt.Println("uint16类型变量u2占用内存空间 = ", unsafe.Sizeof(u2))
	fmt.Println("uint32类型变量u3占用内存空间 = ", unsafe.Sizeof(u3))
	fmt.Println("uint64类型变量u4占用内存空间 = ", unsafe.Sizeof(u4))
	fmt.Println("uint类型变量u5占用内存空间 = ", unsafe.Sizeof(u5))
}

 运行结果

int8类型变量n1占用内存空间 =  1
int16类型变量n2占用内存空间 =  2
int32类型变量n3占用内存空间 =  4
int64类型变量n4占用内存空间 =  8
int类型变量n5占用内存空间 =  8
uint8类型变量u1占用内存空间 =  1
uint16类型变量u2占用内存空间 =  2
uint32类型变量u3占用内存空间 =  4
uint64类型变量u4占用内存空间 =  8
uint类型变量u5占用内存空间 =  8

浮点型

表示小数,浮点型底层参考:浮点数的表示方法_我知道你是高手的博客-CSDN博客_浮点数表示方法

C++浮点型

数据类型占用空间有效数字范围
float(单精度)4字节7位有效数字
double(双精度)8字节16位有效数字

默认情况下输出一个小数,会显示6位有效数字

#include <iostream>
using namespace std;

int main()
{
	//单精度
	float f1 = 3.1415926f;
	//双精度
	double d1 = 3.1415926;

	cout << "float类型变量 f1 = " << f1 << endl;
	cout << "float占用内存空间 = " << sizeof(float) << endl;
	cout << "float类型变量f1占用内存空间 = " << sizeof(f1) << endl;

	cout << "double类型变量 d1 = " << d1 << endl;
	cout << "double占用内存空间 = " << sizeof(double) << endl;
	cout << "double类型变量d1占用内存空间 = " << sizeof(d1) << endl;

	//科学计数法
	float f2 = 3e4;
	cout << "float类型变量(科学计数法) f2 = " << f2 << endl;

	system("pause");

	return 0;
}

输出结果

float类型变量 f1 = 3.14159
float占用内存空间 = 4
float类型变量f1占用内存空间 = 4
double类型变量 d1 = 3.14159
double占用内存空间 = 8
double类型变量d1占用内存空间 = 8
float类型变量(科学计数法) f2 = 30000

Go语言浮点型

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var f32 float32 = 3.141592653589793238462
	var f64 float64 = 3.141592653589793238462

	fmt.Println("float32类型变量 f32 = ", f32)
	fmt.Println("float32类型变量f32占用内存空间 = ", unsafe.Sizeof(f32))
	fmt.Println("float64类型变量 f32 = ", f64)
	fmt.Println("float64类型变量f364占用内存空间 = ", unsafe.Sizeof(f64))

	//科学计数法
	var f2 float32 = 3e4
	fmt.Println("float32类型变量(科学计数法) f2 = ", f2)
}

输出结果

float32类型变量 f32 =  3.1415927
float32类型变量f32占用内存空间 =  4
float64类型变量 f32 =  3.141592653589793
float64类型变量f364占用内存空间 =  8

float32类型变量(科学计数法) f2 =  30000

字符型

用于显示单个字符

C++字符型

语法:char 变量名称 = '单个字符';

注:使用单引号括起来,且只能是一个字符,字符型只占一个字节

字符型变量是将对应的ASCII编码放入到存储单元,而不是将字符本身放到内存存储,如小写字母‘a’对应的ASCII编码为97,则内存存储的是97,而不是'a'

ASCII编码表参考:ASCII 表 | 菜鸟教程

#include <iostream>
using namespace std;

int main()
{
	//字符型
	char ch = 'a';

	cout << "char类型变量 ch = " << ch << endl;
	cout << "char占用内存空间 = " << sizeof(char) << endl;
	cout << "char类型变量ch占用内存空间 = " << sizeof(ch) << endl;
	cout << "char类型变量ch对应的ASCII编码 = " << (int)ch << endl;

	system("pause");

	return 0;
}

输出结果

char类型变量 ch = a
char占用内存空间 = 1
char类型变量ch占用内存空间 = 1
char类型变量ch对应的ASCII编码 = 97

Go语言字符型

支持ASCII编码与Unicode编码

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	//支持ASCII编码
	fmt.Println("----byte类型表示字符(ASCII编码)----")

	var ch byte = 'a'

	fmt.Printf("byte类型变量 ch = %c\n", ch)
	fmt.Println("byte类型变量ch占用内存空间 = ", unsafe.Sizeof(ch))
	fmt.Println("byte类型变量ch对应的ASCII编码 = ", int(ch))


	fmt.Println("----int8类型表示字符(ASCII编码)----")

	var ch1 int8 = 'a'

	fmt.Printf("int8类型变量 ch1 = %c\n", ch1)
	fmt.Println("int8类型变量ch1占用内存空间 = ", unsafe.Sizeof(ch1))
	fmt.Println("int8类型变量ch1对应的ASCII编码 = ", int(ch1))


	//支持Unicode,使用int 或 rune类型表字符
	fmt.Println("----int类型表示字符(Unicode编码)----")

	var ch2 int = '\u0061' //十六进制表示
	fmt.Printf("int类型变量 ch2 = %c\n", ch2)
	fmt.Println("int类型变量ch2占用内存空间 = ", unsafe.Sizeof(ch2))
	fmt.Println("int类型变量ch2对应的Unicode编码 = ", ch2)

	fmt.Println("----rune类型表示字符(Unicode编码)----")

	var ch3 rune = 19990
	fmt.Printf("rune类型变量 ch3 = %c\n", ch3)
	fmt.Println("rune类型变量ch3占用内存空间 = ", unsafe.Sizeof(ch3))
	fmt.Println("rune类型变量ch3对应的Unicode编码 = ", ch3)

	fmt.Println("----rune类型表示字符(Unicode编码)----")

	var ch4 rune = '世'
	fmt.Printf("rune类型变量 ch4 = %c\n", ch4)
	fmt.Println("rune类型变量ch4占用内存空间 = ", unsafe.Sizeof(ch4))
	fmt.Println("rune类型变量ch4对应的Unicode编码 = ", ch4)
}

输出结果

----byte类型表示字符(ASCII编码)----
byte类型变量 ch = a
byte类型变量ch占用内存空间 =  1
byte类型变量ch对应的ASCII编码 =  97
----int8类型表示字符(ASCII编码)----
int8类型变量 ch1 = a
int8类型变量ch1占用内存空间 =  1
int8类型变量ch1对应的ASCII编码 =  97
----int类型表示字符(Unicode编码)----
int类型变量 ch2 = a
int类型变量ch2占用内存空间 =  8
int类型变量ch2对应的Unicode编码 =  97
----rune类型表示字符(Unicode编码)----
rune类型变量 ch3 = 世
rune类型变量ch3占用内存空间 =  4
rune类型变量ch3对应的Unicode编码 =  19990
----rune类型表示字符(Unicode编码)----
rune类型变量 ch4 = 世
rune类型变量ch4占用内存空间 =  4
rune类型变量ch4对应的Unicode编码 =  19990

转义字符 

表示一些不能显示出来的ASCII字符,如换行符、制表符等,下表中常用的转义字符使用加粗字体标识:

转义字符

意义

ASCII码值(十进制)

\a

响铃(BEL)

007

\b

退格(BS) ,将当前位置移到前一列

008

\f

换页(FF),将当前位置移到下页开头

012

\n

换行(LF) ,将当前位置移到下一行开头

010

\r

回车(CR) ,将当前位置移到本行开头

013

\t

水平制表(HT) (跳到下一个TAB位置)

009

\v

垂直制表(VT)

011

\\

代表一个反斜线字符''\'

092

\'

代表一个单引号(撇号)字符

039

\"

代表一个双引号字符

034

\?

代表一个问号

063

\0

空字符(NUL)

000

\ddd

1到3位八进制数所代表的任意字符

三位八进制

\xhh

十六进制所代表的任意字符

十六进制

字符串

表示一串字符

C++字符串

两种风格:

C风格:    char 变量名[] = "字符串";

C++风格:string 变量名 = "字符串";  (需要包含头文件#include <string>)

#include <iostream>
#include <string>
using namespace std;

int main()
{
	//字符串
	//C风格
	char str[] = "Hello, Tracy!";
	cout << "C风格字符串str[] = " << str << endl;

	//C++风格,需要包含头文件#include <string>
	string str1 = "Hello, Tracy!";
	cout << "C++风格字符串str1 = " << str1 << endl;

	system("pause");

	return 0;
}

输出结果

C风格字符串str[] = Hello, Tracy!
C++风格字符串str1 = Hello, Tracy!

Go语言字符串

package main

import "fmt"

func main() {
	var str string = "Hello, Tracy!"
	fmt.Println("字符串变量 str = ", str)

	str1 := "Hello, Tracy!"
	fmt.Println("字符串变量 str1 = ", str1)
}

输出结果

字符串变量 str =  Hello, Tracy!
字符串变量 str1 =  Hello, Tracy!

布尔类型

表示真或假的值,占用1字节内存空间

C++布尔类型

语法:bool 变量名 = true 或 false;  或是 bool 变量名 = 1或 0; 

bool类型需要赋值才能使用(即没有默认值),否则报错。

bool类型实际输出结果为 0 或 1。

#include <iostream>
using namespace std;

int main()
{
	//布尔类型
	bool success = false; //success = 0; 

	cout << "bool类型变量 success = " << success << endl;
	cout << "bool占用内存空间 = " << sizeof(bool) << endl;
	cout << "bool类型变量success占用内存空间 = " << sizeof(success) << endl;

	success = true;  // success = 1;
	cout << "bool类型变量 success = " << success << endl;

	system("pause");

	return 0;
}

输出结果

bool类型变量 success = 0
bool占用内存空间 = 1
bool类型变量success占用内存空间 = 1
bool类型变量 success = 1 

Go语言布尔类型

Go语言布尔类型有默认值为false,且值只能表示true或false,不能使用0或1

package main

import "fmt"

func main() {
	var success bool
	fmt.Println("bool类型变量默认值 success = ", success)
	fmt.Println("bool类型变量占用空间 = ", unsafe.Sizeof(success))

	success = true
	fmt.Println("bool类型变量设置为true success = ", success)

	success = false
	fmt.Println("bool类型变量设置为false success = ", success)
}

输出结果

bool类型变量默认值 success =  false
bool类型变量占用空间 =  1
bool类型变量设置为true success =  true
bool类型变量设置为false success =  false

数据的输入 

从键盘获取数据

C++数据的输入

#include <iostream>
#include <string>
using namespace std;

int main()
{
	//数据的输入
	int i;
	cout << "请输入一个整型:" << endl;
	cin >> i;
	cout << "您输入的整型变量 i = " << i << endl;

	float f;
	cout << "请输入一个浮点型:" << endl;
	cin >> f;
	cout << "您输入的浮点型变量 f = " << f << endl;

	char c;
	cout << "请输入一个字符型:" << endl;
	cin >> c;
	cout << "您输入的字符型变量 c = " << c << endl;

	string str;  //注意在头文件加上#include <string>
	cout << "请输入一个字符串型(不含空格):" << endl;
	cin >> str;
	cout << "您输入的字符串型(不含空格)变量 str = " << str << endl;

	string str1;
	cout << "请输入一个字符串型(含空格):" << endl;
	cin >> str1;
	getline(cin, str1); //若出现空格,则只能获取空格前字符串,因此使用getline
	cout << "您输入的字符串型(含空格)变量 str1 = " << str1 << endl;

	bool b;
	cout << "请输入一个布尔型:" << endl;
	cin >> b;	//只要非0都代表真
	cout << "您输入的布尔型变量 b = " << b << endl;

	system("pause");

	return 0;
}

输出结果(键盘输入内容已加粗)

请输入一个整型:
22
您输入的整型变量 i = 22
请输入一个浮点型:
3.14159269793
您输入的浮点型变量 f = 3.14159
请输入一个字符型:
a
您输入的字符型变量 c = a
请输入一个字符串型(不含空格):
hello
您输入的字符串型(不含空格)变量 str = hello
请输入一个字符串型(含空格):
I am Tracy.
您输入的字符串型(含空格)变量 str1 =  am Tracy.
请输入一个布尔型:
1
您输入的布尔型变量 b = 1

Go语言数据的输入

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	//数据的输入
	var i int
	fmt.Println("请输入一个整型:")
	fmt.Scan(&i)
	fmt.Println("您输入的整型变量 i = ", i)

	var f float32
	fmt.Println("请输入一个浮点型:")
	fmt.Scan(&f)
	fmt.Println("您输入的浮点变量 f = ", f)

	var c byte
	fmt.Println("请输入一个字符型:")
	fmt.Scanf("%c", &c)
	fmt.Printf("您输入的字符变量 c = %c\n", c)

	//scan、scanf、scanln在输入时,会以空格作为一个字符串的结束
	var str string
	fmt.Println("请输入一个字符串型(不含空格):")
	fmt.Scan(&str)
	fmt.Printf("您输入的字符串(不含空格)变量 str = %s\n", str)

	fmt.Println("请输入一个字符串型(含空格):")
	reader := bufio.NewReader(os.Stdin)
	str1, _, err := reader.ReadLine()
	if err != nil {
		fmt.Println("错误:", err)
	}
	fmt.Printf("您输入的字符串(含空格)str1 = %s\n", str1)

	var b bool
	fmt.Println("请输入一个布尔型:")
	fmt.Scan(&b)
	fmt.Println("您输入的布尔变量 b = ", b)
}

 输出结果(键盘输入内容已加粗)

请输入一个整型:
22
您输入的整型变量 i =  22
请输入一个浮点型:
3.14159269793
您输入的浮点变量 f =  3.1415927
请输入一个字符型:
a
您输入的字符变量 c = a
请输入一个字符串型(不含空格):
hello
您输入的字符串(不含空格)变量 str = hello
请输入一个字符串型(含空格):
I am Tracy.
您输入的字符串(含空格)str1 = I am Tracy.
请输入一个布尔型:
true
您输入的布尔变量 b =  true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值