C++学习笔记,第一节段

c++笔记
[2022-12-04]
一,基础语法

1,注释: “//,单行注释”,
“//,多行注释”。

2,变量: 格式为“类型 变量名 = 值”。
变量命名要求与别的语言都相同。

3,常量: 格式两种,
宏常量:“#define 常量名 常量值”。
常规常量:“const 常量名 = 常量值”。

4,整型,
a,short,短整型,占2字节。
b,int 整型,占4字节。
c,long 长整型,win占4字节,linux32位占4字节,linux64位占8字节。
d,long long 超长整型,8字节。

5,sizeof(),可以计算某个数据类型所占内存大小。
语法:sizeof(数据类型/变量)。
例如: sizeof(int)
获取单个值的内存地址用&,它与python中的id()功能相近。

6,浮点型,
float 型,占4字节,小数点后保留7位小数,
double型,占8字节,小数点后保留15位小数。解释器默认为double,所以在创建float时,应在数值后显示加上f。
如,float nums = 3.12f ;

7,科学计数法,
如,3.1415e3,表示3.1415x10的3次方,3.1415e3=3141.5。
如,3.1415e-3,表示3.1415x0.1的三次方,3.1415e-3=0.0031415。

8,字符型,
语法: “char 变量名 = ‘值’ ;”。值必须为单个值且用单引号括住,占一个字节。

9,字符串,C风格语法:char 变量名[] = “值” ;
C++风格语法: string 变量名 = “值”;

10,布尔值,占1个字节。

11,输入,语法: cin >> 变量名;
例如,int a = 0; cin >> a;

12,算术运算,
a,加减乘与常规一样,除法例外,当除数与被除数都是整型时,商也是整型,只有数据类型都是小数时,商才会有小数。
例如,int a = 10; int b = 4; a/b; →2 float a = 10; float b = 4; a/b; →2.5
b,模运算,% 除整取余数,小数不能取模。例如,int a = 10; int b = 4; a%b; →2int a = 10; int b = 20; a/b; →10
c,前置递增递减与后置递增递减的区别,这两个单独使用,结果都相同,当与表达式一块用时,前置会先让变量加1,再与表达式一起计算,后置会先拿变量原始值与表达式计算,再把变量自身加一。
例,int a = 10; int b = 10;
// ++a; →11
// b++; →11;
int c = ++a * 10; // c=110, a=11;
int d = b++ * 10; // d =100,b=11;

13,三目运算,
表达式1 ?表达式2 :表达式3;
如果表达式为1,执行表达式2,否则执行表达式3。
例,int a = 10; int b = 20; int c = 0;
c = a>b ? a : b; //如果a>b成立,把a值给c,否则,把b值给c。

14,switch判断,语句先判断表达式返回值,再把值依次与case的结果值比较,执行相对语句后跳出switch,如果都不相同,就执行default语句。
switch(表达式){
case 结果1:执行语句;
break;
case 结果2:执行语句;
break;

default: 执行语句;
break;
}

15,while与do…while区别,while是只有条件达成才执行语句,do…while是先执行一次语句,再判断条件,若条件成立,继续执行。
例,int a = 0;
do{
//连续输出从0到9等十个数
cout << a << endl;
a++;
} while(a<10);

16,一维数组,值的数据类型必须一致,且存储地址连续的。直接访问数组名,返回的是数组首地址,这一点与python差别巨大。
语法 : 数组类型 数组名[数组长度] = {值,值,值…};

三种创建方式,
int arr[5]; //有5个值的空数组,值以后再添
int arr[5] = {1,2,3,4,5};
int arr[] = {1,2,3};

数组个数,数组总的所占字节/单个所占,sizeof(arr)/sizeof(arr[0])

二维数组,与pandas中相似。
四种创建方法,
int arr[3][2]; //创建未赋值的三行二竖。
int arr[2][2] = {{1,2},{3,4}};
int arr[2][2] = {1,2,3,4}; //自动分行分列
int arr[][2] = {1,2,3,4}; //不常用

二,函数
a,语法,返回值类型 函数名(形参类型 形参变量,形参类型 形参变量,…){函数体;return 返回值;};
如果没有返回值,则类型为void,return ;为空或不写,称为函数正常退出值。与python函数在用法上相似。
b,函数在值传递时,函数会把实参的值复制一份赋给形参,形参与实参是两个独立内存地址的相同值,修改形参的值不会影响实参的值。所以,值传递不能改变实参的值,但地址传参(指针传参)函数不会复制实参的值,它会把实参的内存地址传给形参,实参与形参共用一块内存地址,改变任何一个都影响另一个的值,但这种传值更高效节能。
一个程序中每个函数只能有一个定义,可以有多个声明。
c,函数分文件,
1,创建后缀名为 .h 的头文件,写好框架:#include use namespace std;
2,创建后缀名为 .cpp 的源文件
3,在头文件中写个源文件中的函数声明
4,在源文件中写函数的定义,并添上“头文件名 . h”(头文件名用双引号)。
5,若要使用源文件的函数,直接引用头文件的文件名。#include 头文件名 .h

三,指针,

a,指针就是指向变量的内存地址,32位系统下占4字节。
语法:数据类型 * 指针变量=&变量名
例,int a = 20; int * p = &a;
p返回的是是a的内存地址。
*p返回的是a的值,可以通过它修政a的值

b,空指针,指向内存为0的指针,用于初始化指针变量,这段内存不能访问。因为0一255之间的内存编号分给系统,用户不能访问。例,int *p = NULL; *p = 10; //报错

c,野指针,指向非法内存空间的指针。
例,int *p = (int *)0x1100; //强制指向

d,修饰指针,指针的值不可改,地址指向可改。
例,int a = 12; int b = 11;
const int *p = &a;
*p =11; //错误,不可改值。
p = &b; //正确,可政地址指向

e,修饰常量,指针的地址指向不能政,值可以改。
int * const p = &a;
*p = 11; //正确,允许政值
p = &b; //错误,不可改指向

f,修饰指针常量,值和指向都不可改。
const int *const p = &a;
*p = 11; //错误
p = &b; //错误

g,指针与数组,数组的名字就是数组的首地址,也是第一个数组值的内存地址,当指针对数组解引用时,所获得的就是数组第一个值。
int arr = {4,5,6,7,8,9};
int *p = arr;
for(int i=0;i<6;i++)
{cout << “用指针输出数组” << *p << endl;
p++;}

h,指针与函数,当形参用指针的形式传递值时,因为指针就是实参(正常变量)的内存地址,再加上修饰指针与修饰常量的灵活性,所以,地址传参(指针传参)可以改变实参(正常变量)的值。

四,结构体,struct。
用户自定的一种数据结构,允许存储不同的数据类型。这种结构类似于python字典
语法 : struct 结构体名{结构成员列表};三种通过结构体创建变量方式(类似类关的实例化),
定义结构体时,struct必有,但用结构体实例化变量时,struct关健字可省略。
//先创建一个学生的数据类型
struct Student {
string name; //成员属性
int age; //成员属性
int score; //成员属性}

a,struct 结构体名 变量名 ;
struct Student s1; //实例化
s1.name = “张三”; //给属性赋值

b,struct 结构体名 变量名 = {成员I值,成员2值,成员3值…};
struct Student s2 = {“张三”,19,80};

c,定义结构体时顺便定义变量
struct Student {string name; int age; int score; } s3; //这种方式极少使用
s3.name = “张三”

结构体数组,
struct Student 数组名[n] = {
{属性值1,属性值2,属性值3,…},
{属性值1,属性值2,属性值3,…},
…};
例,struct Student arr[3] = {
{“张三”,20,88},
{“李四”,22,90},
{“王五”,26,70}
};

遍历数组
for(int i=0;i<3;i++){
cout << arr[i].name
<< arr[i].age
<< arr[i].scor
<< endl;
};

结构体指针,用 -> 访问结构体指针属性
例,Student s = {“张三”,20,88};
Student *p = &s;
cout<name<age<score;

结构在嵌套使用时,内部的结构体应先定义在前面,当结构体做为函数实参使用时,有值传递和地址传递(指针)两种,值传递时,函数会把实参复制一份赋值给形参,所以函数内部修改结构体属性值,不会影响函数外的属性值(局部变量),地址传值就不会复制实参,只把实参的内存地址赋给形参,形参与实参都指向同一个内存地址,所以改变函数形参的值,就等于改变了全局变量的值,但这种传参更高效,更节能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值