C++笔记(一)基础编程

C++笔记(一)

浮点数据类型
float f1 = 3.14f;      //如果不写这个f,那么程序会默认为这个是double类型
               //因此,这段代码会经过一个强制类型转换成float。
转义字符
  • 水平制表符\t
cout << "a\thello" << endl;      
cout << "aa\thello" << endl;
cout << "aaa\thello" << endl;
//这三行代码的输出,会非常的整齐:
// a     hello
// aa   hello
// aaa hello          //制表符会自动调整宽度,可以整齐的输出
三目运算符
  • 语法:表达式1 ? 表达式2 : 表达式3
  • 解释:如果表达式1的值为真,执行表达式2,并返回表达式2的结果(反之就是表达式3)。
c = a > b ? a :b;           //给c赋值:a和b中最大的值
a > b ? a : b = 100;     //给a和b中最大的值,赋值100
循环结构
  • while语句是先进行判断,再运行语句

  • do…while语句是先运行一次循环,再进行判断。

    • 语法:do{循环语句} while(循环条件);
  • for循环执行顺序:
    image-20220302194547856

跳转语句
  • break:跳转出最近的内层循环,是直接退出循环,而不是进行下一次循环
  • continue:不执行剩下的语句,直接进行下一次循环
  • goto:无条件跳转
goto flag;     //程序执行到这里,会强制跳转到flag标记处
flag:      //需要要有标记处
...
指针
  • 指针就是地址,既然是地址,那么所占用的大小,也就是int大小(32位系统占用4字节,64位系统占用8字节,一般都是32字节的)
int a = 10;
int *p;              //定义int型指针,p就是一个地址
p = &a;         //&a就是取地址,此时,p是a的地址
cout << *p << endl;  //*解引用,找到p作为地址所指向的值
					 //*p = 10
空指针
  • 不可访问,默认指向了0地址(0~255地址被系统占用)。
  • 一般用于你有一个指针,暂时不知道赋什么值
int *p = NULL;        //空指针
const修饰指针
  • 常量指针:指针的指向可以修改,但是指针指向的值不可修改
  • 指针常量:指针的指向不可修改,但是指针指向的值可以修改
  • 修饰指针和常量:指针的指向和指针指向的值都不可修改
int a = 10;
int b =20;
const int *p = &a;   //常量指针
*p = 20;        //错误,指针指向的值不可以修改
p = &b;         //正确,指针的指向可以修改
int const *p = &a;   //指针常量
*p = 20;             //正确,指针指向的值可以修改
p = &b;              //错误,指针的指向不可修改
const int const *p = &a;   //修饰指针和常量,都不可修改
指针与函数
void swap(int *p1, int *p2){
    int temp = *p1;
    *p1 = *p2;        //用解引用的方式,p1地址指向的值
    *p2 = temp;
}
int main(){
    int a = 10;
    int b = 20;
    swap(&a, &b);   //将a,b取地址,可改变形参和实参
}
结构体
定义和使用(三种方式)
struct student{
    string name;
    int age;
    int score;
};
//}s3;                  //对应方式三的形式
int main(){
    student s1;      //方式一:直接声明一个结构体
    student s2 = {"李四", 19, 90};  //方式二:声明结构体是直接赋值
    s3.name = "王五";   //方式三:在结构体的最后命名s3,可以直接使用
}
结构体数组
struct student{
    string name;
    int age;
    int score;
};
int main(){
    student arry[3] = {
        {"张三",19,90},
        {"李四",20,91}
    };                        //直接赋值的方式
    arry[1].name = "王五";   //可以对数组直接使用.运算符,访问数据
}
结构体指针
  • 就是使用指针访问结构体中的变量,使用->运算符
struct student{
    string name;
    int age;
    int score;
};
int main(){
    student s = {"张三", 19, 10};
    //int *p = &s;              //必须对应到s的类型
    student *p = &s;        //定义一个指针指向结构体
    cout << p->name << endl;   //指针访问结构的变量,使用->运算符
}
结构体做函数参数
  • 有值传递(形参修改不会影响实参的值)和地址传递(形参和实参相同,修改任一项都会更改另一项)两种
//定义结构体同上,struct student
void printstudent1(student s){
    s.age = 20;                 //值传递不会修改实参的值,因此没用
    cout << s.name << endl;       //值传递使用.运算符访问
}
void printstudent2(student *p){  //形参是定义一个指针
    s->age = 20;                   //地址传递会修改实参的值
    cout << p->name << endl;    //地址传递使用->运算符访问
}
int main(){
    student s = {"战三", 29 ,10};
    printstudent1(s);
    printstudent2(&s);  //使用地址传递,也需要对应使用取地址符号
}
结构体中const使用
  • 由于地址传递可以更改实参的值,为了防止误操作而修改的实参的值,因此引入了const。
//结构体定义如上:struct student
void printstudent2(const student *p){ //在形参时添加const
    s->age = 20;       //这里会报错,因此使用了const不能修改实参的值
                //const就是让函数中的操作只可以读,不可以
    cout << p->name << endl;    //地址传递使用->运算符访问
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值