记录一下C++常用数据类型的使用,C++常用的基本数据类型
布尔类型 (bool)
字符类型 (char)
整数类型 (int)
浮点类型 (double)
void类型 (void)
枚举类型 (enum)
1.布尔类型
布尔类型只有两个值,true,false 不是真就是假
布尔类型可以和整型或指针类型进行隐式转化,
0即假,非0即真。
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
//整形隐式转换为Bool
cout<<"int Convert bool"<<endl;
bool b=true;
cout<<b<<endl;//输出1
b=false;
cout<<b<<endl;//输出0
b=7;
cout<<b<<endl;//输出1
b=-7;
cout<<b<<endl;//输出1
b=0;
cout<<b<<endl;//输出0
//bool隐世转换为整形
cout<<"bool Convert int"<<endl;
int i=true;
cout<<i<<endl;//输出1
i=false;
cout<<i<<endl;//输出0
i=b=7;
cout<<i<<endl;//输出1
//指针转换为Bool
cout<<"pointer Convert bool"<<endl;
int *p=NULL;
b=p;
cout<<b<<endl;//指针没有指向时为0,有指向是为1
i=0;
p=&i;
b=p;
cout<<b<<endl;//不管指针指向的值是多少,只要有指向,就为1
system("pause");
return 0;
};
这里,我们输出bool,但是看到的并不是true或false
#include <iostream>
using namespace std;
#define PRINT_BOOL(b) if(b){cout<<"TRUE"<<endl;} else {cout<<"FALSE"<<endl;}
int main(int argc,char* argv[])
{
bool b=true;
PRINT_BOOL(b);//输出TRUE
system("pause");
return 0;
};
2.字符类型
每个字符都对应了有一个ASCII码,这是一个整数,例如 ‘b’是98
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
//获得字符的ASCII码
char c='b';
cout<<"The value of "<<c<<" is "<<int(c)<<endl;
//直接用ASCII码给字符赋值
c=66;
cout<<c<<endl;//输出B
//直接对字符进行算术操作
//66+32=98 此时c的ASCII码为98 即b
c+=32;
cout<<c<<endl;//输出b
system("pause");
return 0;
};
3.整形、浮点型
这个和其他高级语言的差不多
4.sizeof
sizeof 是获得一种类型在当前系统中占用多大的字节,具体使用方法如下
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<sizeof(int)<<endl;//输出4
cout<<sizeof(double)<<endl;//输出8
system("pause");
return 0;
};
5.void
void 有几种用途
1.函数没有返回值时为void 如 void f1();
2.函数没有参数时,最好写上void 不然在ubantu中还是会运行成功
#include<stdio.h>
void f1();
void f2(void);
int main(int argc,char *argv[])
{
int p =10;
f1(p);//@1
f2(p);//@2
return 0;
}
void f1()
{
printf("f1 I am not receive a parameter./n");
}
void f2(void)
{
printf("f2 I am not receive a parameter./n");
}
编译器及平台为:gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
在注释掉@2,只有@1时,运行如下:
f1 I am not receive a parameter.
f1是个没有参数的函数,调用时,传递了参数,程序可以正常运行,这是错误的。
在加上@2时,运行如下:
error: too many arguments to function
这说明,如果没有显示声明参数为void,则会发生意想不到的错误。
3.在不确定类型时可以使用void
#include <iostream>
using namespace std;
void f1(void* v1,int v2);
int main(int argc,char* argv[])
{
int p=10;
f1(&p,1);
char c='a';
f1(&c,2);
system("pause");
return 0;
};
void f1(void* v1,int v2)
{
int* p_int;
char* p_char;
switch (v2)
{
case 1:
p_int=(int*)v1;
cout<<*p_int<<endl;
break;
case 2:
p_char=(char*)v1;
cout<<*p_char<<endl;
break;
default:
break;
}
}
6.枚举
#include <iostream>
using namespace std;
enum MyEnum
{
red=100,
yellow=103
} colorEnum;
int main(int argc,char* argv[])
{
colorEnum=MyEnum::yellow;
cout<<colorEnum<<endl;
system("pause");
return 0;
};
7.typedef
#include <iostream>
#include <string>
int main()
{
using namespace std;
typedef int myint;
myint a=10;
cout<<a<<endl;
return 0;
}
8.格式化输出setw
#include <iostream>
#include <string>
#include <iomanip>
int main()
{
using namespace std;
int num1=1234567,num2=123;
/**
setw() 默认右对齐输出,如1234567,总共七个字符,这里参数是8,输出是 空白符1234567
下面这条语句输出如下 1234567 123 其中两个变量中间空了5个空格
*/
cout<<setw(8)<<num1<<setw(8)<<num2<<endl;
/**
setiosflags 将默认的右对齐改为左对齐, 输出为 1234567 123 s
最后输出个s是为了看到效果
*/
cout<<setiosflags(ios_base::left);
cout<<setw(8)<<num1<<setw(8)<<num2<<"s"<<endl;
return 0;
}
9.逗号表达式
#include <iostream>
#include <string>
#include <iomanip>
int main()
{
using namespace std;
int num1=0,num2=0,num3=0;
//逗号表达式的作用,10赋值给num1,20赋值给num2,在将最后一个表达式的值给num3 此时 num1=10 num2=20 num3=20
num3=(num1=10,num2=20);
cout<<"num1:"<<num1<<"\tnum2:"<<num2<<"\tnum3:"<<num3<<endl;
return 0;
}
10.强制类型转换 static_cast
#include <iostream>
#include <string>
#include <iomanip>
int main()
{
using namespace std;
double num1=10.5,num2=20.7;
//隐世类型转换
int num3=num1+num2;
cout<<num3<<endl;
//老式强制类型转换
num3=(int)num1+(int)num2;
cout<<num3<<endl;
//标准C++强制类型转换
num3=static_cast<int>(num1)+static_cast<int>(num2);
cout<<num3<<endl;
return 0;
}
11.auto
#include <iostream>
#include <string>
#include <iomanip>
int main()
{
using namespace std;
string num1="10.5";
//auto 不确定的类型 只有第一次赋值时系统自动确定其类型, 后面如果再次赋值不同的类型则出现乱码
auto num2=num1;
cout<<num2<<endl;
return 0;
}
12.查看表达式类型 typeid
#include <iostream>
#include <string>
#include <iomanip>
#include <typeinfo>
int main()
{
using namespace std;
double num1=10.5;
auto num2=num1;
//typeid 获得表达式的类型 输出为double
cout<<typeid(num2).name()<<endl;
return 0;
}