一、基本数据类型与运算符

1.字符常量与字符串常量

ljh74I.png

字符型常量和字符串常量的区别?

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. 不论把实型数写成小数形式还是指数形式,在内存中它们总是以指数形式存储。
  2. 所谓规范化的指数形式,数字部分必须小于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
#include<iostream>
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.自增自减,膜运算,逗号表达式

ljTTpR.png

  1. ++、—运算符操作数必须为变量,不能是表达式

  2. %运算符(模运算)操作数必须是整型,结果也为整型数

  3. 逗号表达式,依次计算,整体的值为最后结果

先赋值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
#include<iostream>
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函数的三个参数

ljHTL6.png
代码运行一下

1
2
3
4
5
6
7
8
#include<iostream>
using namespace std;
int main()
{
int i;
for(i=1;i++<4;);
cout<<i;
}

运行结果

5

第三条语句可以省略

因为第二条语句中含有变量i的自增变化

三、数组的初始化

**一维数组**

一维数组的初始化应放在花括号内,一般称为初始化列表。

说明

  1. 花括号里的元素值按位置一次赋给每个元素
  2. 当定义数组是没有给出数组的大小,但给出了初始化列表,那么数组的长度就由表中元素的个数来确定。

    int a[]={‘1’,’2’,’3’}

  3. 当定义数组时给出了具体长度,那么在初始化时不允许列表中的元素个数超出指定的长度

  4. 当定义数组时给出了具体长度,在初始化时允许列表中的元素个数小于定义的大小,而剩余的元素将被初始化为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!

ljXu34.png

答案:B

四、动态开辟

特点:开辟出的空间没有名字——>以指针为载体

int num;
char *p=new char[num];   //动态开辟数组
delete []char;          //回收数组

注意:动态开辟不能初始化

int *p= new int[10]={0};         //错误!