【C++】小知识点总结
一、基本数据类型与运算符
1.字符常量与字符串常量
1)形式上:
字符常量是单引号引起的一个字符
字符串常量是双引号引起的若干个字符
2)含义上:
字符常量相当于一个整形值(ASCII值),可以参加表达式运算
字符串常量代表一个地址值(该字符串在内存中存放位置)
3)占内存大小
字符常量只占一个字节
字符串常量占若干个字节(至少一个字符结束标志)
2.数值常量的表示
**(1)整型常量**十进制:由0~9组成,第一个数字不能为0
八进制:以0开头
十六进制:以0x(或0X)开头
**(2)实型常量**实型常量就是浮点数,分为十进制小数形式和指数形式两种。
***小数形式***一般由整数部分和小数部分组成,也可以省略其中一部分
如:”3.“==”3.0“ ”.1415“==”0.1415“
***指数形式***<数符>数字部分E指数部分
如:0.31415E1==0.31415*10^1
注:
- 不论把实型数写成小数形式还是指数形式,在内存中它们总是以指数形式存储。
- 所谓规范化的指数形式,数字部分必须小于1,同时小数点后面第一个数字必须是一个非0数字
3.数据类型与所占空间大小
名称 | 实例 | 字节数/B |
---|---|---|
整型 | 0 | 4 |
浮点型 | 0.0 | 8 |
字符型 | ‘0’ | 1 |
字符串型 | “0” | 2 |
验证一下1
2
3
4
5
6
7
8
9
10
11
12
13
using namespace std;
int main()
{
int a=0;
double c=0.0;
char b='0';
char d[]="0";
cout<<sizeof(a)<<endl;
cout<<sizeof(c)<<endl;
cout<<sizeof(b)<<endl;
cout<<sizeof(d);
}
输出结果如下
4
8
1
2
4.自增自减,膜运算,逗号表达式
++、—运算符操作数必须为变量,不能是表达式
%运算符(模运算)操作数必须是整型,结果也为整型数
逗号表达式,依次计算,整体的值为最后结果
先赋值b=3,所以b的值是3,再计算b+1,b+2,由于没有再进行赋值运算,所以b的值还是3,不过整体表达式的值是最后的值。你可以这样测试 a=(b=3,b+1,b+2);你会发现输出的a是5
5.i+=j+=2
程序片段如下1
2
3
4
5
6
7
8
using namespace std;
int main()
{
int i=1,j=1;
i+=j+=2;//i=i+j+2
cout<<i;
}
输出结果为
4
从左向右计算
i=i+j+=2
j=j+2
i=i+j+2
二、for函数的三个参数
代码运行一下1
2
3
4
5
6
7
8
using namespace std;
int main()
{
int i;
for(i=1;i++<4;);
cout<<i;
}
运行结果
5
第三条语句可以省略
因为第二条语句中含有变量i的自增变化
三、数组的初始化
**一维数组**一维数组的初始化应放在花括号内,一般称为初始化列表。
说明
- 花括号里的元素值按位置一次赋给每个元素
当定义数组是没有给出数组的大小,但给出了初始化列表,那么数组的长度就由表中元素的个数来确定。
int a[]={‘1’,’2’,’3’}
当定义数组时给出了具体长度,那么在初始化时不允许列表中的元素个数超出指定的长度
- 当定义数组时给出了具体长度,在初始化时允许列表中的元素个数小于定义的大小,而剩余的元素将被初始化为0.
初始化二维数组时,可以不给出第一维(行)大小
定义二维数组为形参时,可以不给出第一维(行)大小,但必须给出第二维(列)大小
**字符数组**1.利用字符常量进行初始化
char c[4]={'a','b','c','d'}; // 全部初始化
char c[4]={'a','b','c'}; // 部分初始化,c[3]='\0'
2.利用字符串进行初始化
char c[]={"SYolin"}; //字符串初始化
char c[]="SYolin"; //或者去掉{}
特别注意
在用字符串赋初值是,字符数组定义的大小至少要比字符串的长度多占1B,用于编译系统放置’\0’
char[6]="SYolin"; //错误!用于初始化的元素超过了6!
答案:B
四、动态开辟
特点:开辟出的空间没有名字——>以指针为载体
int num;
char *p=new char[num]; //动态开辟数组
delete []char; //回收数组
注意:动态开辟不能初始化
int *p= new int[10]={0}; //错误!