/*
常量的定义方式
1、#define 宏常量
2、const 修饰的变量
*/
/*
关键字
标识符命名规则
1、标识符不能是关键字
2、标识符只能由字母、数字和下划线组成
3、标识符第一个字符只能是字母或下划线
4、标识符是区分大小写的
建议:给变量起名的时候,最好能见名知意
*/
/*
sizeof 关键字
语法: sizeof(数据类型/变量)
*/
/*
创建变量语法: 数据类型 变量名 = 变量初始值
数据类型存在的意义:
给变量分配合适的内存空间
整型
short 2字节 (15
int 4字节 (31
long win 4字节,Linux 32位 4字节 64 位 8字节 (31
long long 8字节 (62
实型(浮点型)
float 4字节 float f1 = 3.14f; 小数默认是双精度,加个f代表单精度,减少转换
double 8字节
默认情况下,输出一个小数会输出六位小数
科学计数法 float f2 = 3e2; 3 * 10 ^2
字符型
char 1个字节
作用:字符型变量用于显示单个字符
语法:char ch = 'a';
注意1、在显示字符型变量时,用单引号将字符括起来,不要使用双引号 char a = "s"; 错误
注意2、单引号只能有一个字符,不可以是字符串 char a = 'sddjjd" 错误
字符型变量对应ASCII编码 (int)ch
字符串型
作用:用于表示一串字符
1、c风格字符串: char 变量名[] = "字符串常量"
2、c++风格字符串:string 变量名 = "字符串常量" 头文件
布尔类型bool
true 1 1个字节
false 0 1个字节
bool flag = true;
转义字符
换行符 \n
反斜杠 \\
水平制表符 \t 占八个字符的位置,整齐的输出数据
数据的输入
cin
cin >> 变量;
*/
/*
运算符
1、算术运算符
正负 加减乘除 取模 前置递增 后置递增 前置递减 后置递减
前置后置的区别
前置递增 先让变量+1,在进行表达式运算
后置递增 先进行表达式运算,在进行+1
2、赋值运算
3、比较运算符
4、逻辑运算符
非 ! 与 && 或 ||
*/
/*
选择结构
单行 多行 多条件
if
else if
else
嵌套if语句
三目运算符
语法:表达式1 ?表达式2:表达式3;
返回的是变量
switch语句 表达式类型只能是整型或字符,不能是区间
语法:switch(表达式)
{
case 条件:
break;
......
default:
break;
}
while循环语句
语法:while(循环条件){}
do{..}while(循环条件);
for循环语句
嵌套循环
跳转语句 break
continue语句
goto语句 可以跳转到标记处
语法:goto FLAG;
.....
FLAG:
......
*/
/*
一维数组:
数据类型 数组名 [数组长度]; 定义数组时,必须要有一个初始长度
数据类型 数组名 [数组长度] = {值1, 值2 ,...}; 如果没有全部赋值,会用0来填充
数据类型 数组名[] = {值1, 值2 ,...};
特点:
放在连续的内存空间中
数组中每个元素都是相同的数据类型
一维数组名的用途:
1、可以统计整个数组在内存中的长度; sizeof(arr) 数组长度 sizeof(arr[0]) 元素长度
2、可以获取数组在内存中的首地址。 arr = &arr[0]
二维数组:
数据类型 数组名[行数][列数];
数据类型 数组名[行数][列数] = {{数据1,数据2},{},{}};
数据类型 数组名[行数][列数] = {数据1,数据2,..数据n};
数据类型 数组名[][列数] = {数据1,数据2,..数据n};
二维数组名称用途:
1、可以查看占用内存的大小; sizeof(arr) 数组长度 sizeof(arr[0]) 第一行占用空间 sizeof(arr[0][0]) 一个数据占用的空间
2、可以查看二位数组的首地址。 (int)arr = (int)arr[0] = (int)arr[0][0]
*/
/*
函数:
1、返回值类型
2、函数名
3、参数列表
4、函数体语句
5、return 表达式
语法:
返回值类型 函数名 参数列表
{
函数体语句;
return 表达式;
}
函数定义时的参数时形参
函数调用时的参数是实参
调用时,实参传递给了形参
当值传递的时候,如果形参改变,不会影响到实参
无参无返
有参无返
无参有返
有参有返
定义只能有一次
函数的声明:
*/
/*
函数的分文件编写
1、创建.h后缀名的头文件
2、创建.cpp后缀名的源文件
3、在头文件中写函数的声明
4、在源文件中写函数的定义
*/
/*
指针:
指针的作用:可以通过指针间接访问内存
内存编号是从0开始的,一般用是十六进制数字表示
可以利用指针变量保存地址
定义一个指针:
数据类型 * 指针变量名:
int * p;
让指针记录变量a的地址:
p = &a;
指针占用空间大小:32位占4个字节 64位占8个字节 sizeof(int *);
空指针和野指针:
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量
int *p = NULL;
空指针指向的内存是不可以访问的
0~255是系统占用内存,因此不可以访问
野指针:指针变量指向非法的内存空间
int *p = (int *)0x2020;
cout << *p << endl; //错误,不能访问
常量指针
const修饰指针
const int *p = &a;
特点:指针指向可以改,但是指针指向的值不可以改
指针常量
int * const p =&a;
特点:指针指向的不可以改,指针指向的值可以改
const既修饰指针,又修饰常量
const int * const p = &a;
特点:都不可以更改
指针和数组:int *p = arr; p++;
指针和函数:
地址传递:会改变实参的值
*/
/*
结构体
结构体基本概念:结构体属于用户自定义的数据类型,允许用户存储不同的数据类型。
语法:struct 结构体名{结构体成员列表};
结构体创建变量方式:
1、struct 结构体名 变量名
2、struct 结构体名 变量名 = {成员1值,成员2值....}
3、定义结构体时,顺便创建变量
struct Student
{
string name;
int age;
int score;
}s3;
struct Student s1;
struct Student s2 = { "wang",20,9090 };
结构体数组:
作用 :将自定义的结构体放入到数组中方便维护
语法:struct 结构体名 数组名[元素个数] = {{},{},...{}}
struct Student stuArray[3] = {
{"zhang",18,100},
{"wang",20,120},
{"li",20,348}
};
stuArray[2].name = "san";
结构体指针:
作用:通过指针访问结构体中的成员
使用操作符 -> 可以通过结构体指针访问结构体属性
struct Student s2 = { "wang",20,9090 };
struct student *p = &s2;
cout << p -> name << p -> age << p -> score << endl;
结构体嵌套结构体:
作用:结构体中可以是另一个结构体
struct teacher
{
int id;
string name;
struct student stu; //定义在前面
};
teacher t;
t.id = 10000;
t.stu.name = "王”;
t.stu.score = 100;
结构体做函数参数:
作用:将结构体作为参数向函数传递
传递方式:
值传递
地址传递
struct Student
{
string name;
int age;
int score;
}s3;
值传递:
void printStudent(struct Student s)
printStudent(s3); //复制一个副本,占用内存大小为结构体大小
地址传递:
voud printstudent(struct Student *p)
printstudent(&s); //占用内存大小为指针所占的大小,始终为4个字节
结构体中const使用场景:
作用:防止误操作
*******将函数中的形参改为指针,可以减少内存空间,而不会赋值新的副本出来*********
voud printstudent(const struct Student *p) //一旦有修改的操作,就会报错,防止误操作
*/
C++,C语言语法基础学习随笔
最新推荐文章于 2022-03-10 17:04:31 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)