初学C++

一、函数的分文件操作
/**
 * 1、创建.h文件
 * 2、创建.cpp文件
 *
 *  .cpp负责实现
 *  #include <iostream>
 *  using namespace std;
 *XXX
 * .h负责声明
 * #include "XXX.h"
 */
1、.cpp文件(源文件实现代码)
#include "swap.h"

//
// Created by mimichen on 2020/5/24.
//

//比较大小
int min(int a, int b) {
    return a > b ? b : a;
    cout << a << endl;
    cout << b << endl;
}

//加法
int add(int num1, int num2) {
    int sum = num1 + num2;
    return sum;
}

void swap(int num1, int num2) {
    int temp = num1;
    num1 = num2;
    num2 = temp;
    return;
}

//比较大小
int max(int a, int b) {
    return a > b ? a : b;
}
2、.h文件函数的声明
#include <iostream>
using namespace std;
//
// Created by mimichen on 2020/5/24.
//

#ifndef DAY03_SWAP_H
#define DAY03_SWAP_H

#endif //DAY03_SWAP_H

//函数的声明 函数可以写再main后面
int min (int num1, int num2);
二、指针的含义
  //再32位系统 指针都是占4个字节
	/**
     * int a = 10;
     * a   (0x0000)【10】
     * p   【0x0000】 p变量保存一个地址值  ->指针  指针就是一个地址
     */	

    int a = 10;
    //定义一个指针   数据类型 * 指针变量
    int * p;

    //让指针指向a地址
    p = &a;
    cout << "a的地址为:" << &a <<endl;
    cout << "指针p为:" << p <<endl;
//    a的地址为:0x61fe14
//    指针p为:0x61fe14

    //操作指针 指针前加* 代表解引用,找到指针指向的内存的数据 *p -> 10
    *p = 1000;
    cout << "a为:" << a << endl;
    cout << "*p为:" << *p << endl;
//=========================================================
   int a = 10 ;
//    int *P;
//    p = &a;
    int *p = &a;

    cout << "int * 大小为" << sizeof(p) <<endl;
    cout << "int * 大小为" << sizeof(float *) <<endl;

//=========================================================
   //指向为内存编号为0的指针叫空指针  空指针指向的内存是不可访问的
    //空指针用于对指针初始化
    int *p =NULL;
    //空指针是不可以访问的 0-255系统占用不可更改
    *p = 100;

//=========================================================
    //避免使用野指针
    //野指针
    int *p = (int *) 0x1100;
    //不可以访问
    cout << *p <<endl;
1、const修饰指针含义
    int a = 10;
    int b = 10;
    //const 修饰指针 -->常量指针 指针指向可以改 指针指向的值不可以修改     const int *p = &a
    const int * p1 = &a;

    cout << *p1 << endl;
    cout << p1 << endl;

    //const 修饰常量 -->指针常量 指针指向不可以改 指针指向的值可以修改    int * const p = &a
    int * const p2 = &a;

    //const int * const p = &a; 都不可以修改
    const int * const  p3 = &a;
2、指针遍历数组
    int arr[10] = {0,1,2,3,4,5,6,7,8,9};
    cout << "第一个元素为:" << arr[0] <<endl;

    int *p = arr;
    //解引用
    cout << "第一个元素为:" << *p <<endl;
    p++; //指针偏移四个字节
    cout << "第二个元素为:" << *p <<endl;

    int * p2 = arr;
    //利用指针遍历数组
    for (int i = 0; i < 10; ++i) {
        cout << *p2 << endl;
        p2++;
    }
3、地址传递(修改实参的值)
    int a = 10;
    int b = 20;
    cout << "a元素为:" << a << endl;
    cout << "b元素为:" << b << endl;

    //传入a,b的 地址的值
    swap2(&a,&b);
    cout << "a元素为:" << a << endl;
    cout << "b元素为:" << b << endl;

    int arr[10] = {4,8,5,9,6,7,2,3,6,2};
    int len = sizeof(arr) / sizeof(arr[0]);

    bubbleSort(arr,10);
    printArray(arr,10);
4、小案例
//值传递
void swap(int num1, int num2) {
    int temp = num1;
    num1 = num2;
    num2 = temp;
}

//地址传递
void swap2(int *p1, int *p2) {
   int temp = *p1;
   *p1 = *p2;
   *p2 = temp;
}

/**
 * 冒泡排序
 * @param arr 数组首地址
 * @param len 数组长度
 */
void bubbleSort(int *arr, int len)
{
    for (int i = 0; i < len - 1; ++i)
    {
        for (int j = 0; j < len - i -1; ++j)
        {
            if (arr[j] > arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

void printArray(int *arr, int len) {
    for (int i = 0; i < len; ++i) {
        cout << arr[i] << endl;
    }
}
三、结构体
//自定义数据类型  结构体
struct Student {
    string name;
    int age;
    int score;
}s3;

int main() {

    //创建学生
    //struct Student s1 struct关键字可以省略
    struct Student s1;
    s1.name = "张三";
    s1.age = 18;
    s1.score = 99;
    cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;

    //struct Student s2 = {...}
    struct Student s2 = {"李四",19,98};
    cout << "姓名:" << s2.name << " 年龄:" << s2.age << " 分数:" << s2.score << endl;

    //在定义结构体时顺便创建结构体变量  不建议使用
    s3.name = "王五";
    s3.age = 20;
    s3.score = 100;
    cout << "姓名:" << s3.name << " 年龄:" << s3.age << " 分数:" << s3.score << endl;
    
    system("pause");
    return 0;
}
1、结构体数组
//结构体数组
//struct 结构体名  数组名 [元素个数] {{},{},{}}

struct Student {
    string name;
    int age;
    int score;
};

int main() {

    struct Student stuArray[3] = {
            {"张三",18,99},
            {"李四",19,98},
            {"王五",20,100}
    };
    //修改
    stuArray[2].name = "赵六";

    //遍历
    for (int i = 0; i < 3; ++i) {
        cout << "姓名:" << stuArray[i].name << " 年龄:" << stuArray[i].age << " 分数:" << stuArray[i].score << endl;
    }

    system("pause");
    return 0;
}
2、结构体的指针访问
//结构体数组
//struct 结构体名  数组名 [元素个数] {{},{},{}}

struct Student {
    string name;
    int age;
    int score;
};

struct Teacher {
    int id;
    string name;
    int age;
    struct Student stu;
};


int main() {
    struct Student s1 = {"张三",18,100};

    //指针指向结构体变量 struct可以省略
    struct Student * p = &s1;
    cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
    
    //结构体套娃
    Teacher t;
    t.id = 1;
    t.name = "老王";
    t.age = 30;
    t.stu.name = "小王";
    t.stu.age = 18;
    t.stu.score = 100;

    cout << "老师姓名:" << t.name << " 老师年龄:" << t.age << " 学生分数:" << t.stu.score << endl;

    system("pause");
    return 0;
}

3、结构体传递
struct Student {
    string name;
    int age;
    int score;
};

//值传递
void printStu(struct Student s1) {
    cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;
}

//地址传递
void printStudent(struct Student *p) {
    cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
}


int main() {

    struct Student s1;
    s1.name = "张三";
    s1.age = 18;
    s1.score = 99;
    //cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;

    printStu(s1);
    printStudent(&s1);
    system("pause");
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值