C++笔记 【指针】【结构体】

goto 语句格式

  goto A//标记一般为大写

  A://标记

  执行goto标记可以跳转到标记位置

c++数组的格式

  求数组长度

    

 

   打印数组首地址是直接用数组名不加数组下标:(如下图)

    

 

 

  一维数组

    

 

   二维数组

    

 

 

       

 

 

 函数的定义方式

  

 

 

 

 

  值传递特性:
    形参改变不会影响实参

    如果不需要返回值可以将返回值类型处填写void 且不写return语句;

 

 

 函数的常见方式

  函数的声明

 

    目的是提前告诉编译器函数的存在,否则函数只能定义在主函数的前面,可以多次声明,但是只能一次

    函数声明的写法:  数据类型 函数名 (参数);

  函数的分文件编写

    1.创建.h为后缀名的头文件

    2.创建.cpp为后缀的源文件

    3.在头文件中声明函数

    4.在源文件中定义函数

    5.在定义函数的源文件中调用用包含定义好的头文件;格式为:#include "头文件" 注:自定义的头文件是用双引号包裹的

    6.在主函数所在的源文件中也调用该头文件

指针 

  可以通过指针保存地址(指针就是地址

  指针的定义语法:: 数据类型 * 指针变量名;

  

 

  图中的&为取值符号,p=&a;是将a的地址存放在p中

  使用指针 :* 指针名;

  当p指向a的地址是,*p就是a,相当于伪装成主人并且进入主人家里

  

  

  指针存放的是地址(16进制),在32位操作系统占用四个字节、在64位操作系统中占用八个字节。

  空指针

      空指针定义:数据类型 * 指针名=NULL;

    

    内存编号0~255被系统占用是不可以访问的 ,否则将出现错误

  野指针

    野指针应当避免,如:数据类型 指针名= (int*)未知的内存地址;

    

 

 

    示例:

    

  const修饰指针

    在指针的前面加上const就成了const指针

     

 

    1.常量指针

      写法:const 数据类型 * 指针名 = &指向的变量;

      特点:可以更改指向,但是指向的值是不可以改的(多文件只读模式)

 

    2.指针常量

      写法:数据类型 * const 指针名 = &指向的变量;

      特点:可以更改指向的值,不可以更改指向(单文件操作)

 

    3.即修饰指针又修饰常量

      写法:const 数据类型 * const 指针名 = &指向的变量;

      特点:不可以更改指向,也不可以更改指向的值(单文件只读模式)

 

指针访问数组

结构体定义

struct 结构体名{

  数据类型 属性名;

  数据类型 属性名;

}

 如图:

 

 

 指针访问结构体的属性是采用->(称为操作符。参考下方代码18行)

结构体数组(先要定义结构体)

结构体名 数组名[长度]={

{属性名,属性名 },

{属性名,属性名 }

}

引用

结构体名[下标].属性名="值";

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 struct Xuesheng {//定义结构体
 5     string Xingming;
 6     int Nianling;
 7     int Fenshu;
 8 };
 9 int main() {
10     system("chcp 65001");
11     Xuesheng Liebiao[3] = { "zhangsan" ,14,100};
12     Liebiao[1] = { "lisi",13,45 };
13     Liebiao[2] = { "wangwu",12,32 };
14     cout << Liebiao[0].Xingming << endl;//直接打印
15     cout << Liebiao[1].Xingming << endl;//直接打印
16     cout << Liebiao[2].Xingming << endl;//直接打印
17     struct Xuesheng * p = &Liebiao[0];//指向地址
18     cout << p->Nianling<< endl;//指向属性
19     system("pause");
20 }

结构体嵌套

#include <iostream>
#include <string>
using namespace std;
struct Xuesheng {//定义学生
    string Xingming;
    int Nianling;
    int Fenshu;
};
struct Laoshi {//定义老师
    string Xingming;
    int Nianling;
    int id;
    Xuesheng xuesheng;//嵌套结构体
};

int main() {
    //system("chcp 65001");
    //向结构体中添加数据
    Laoshi y;
    y.Xingming = "";
    y.Nianling = 30;
    y.id = 1;
    y.xuesheng.Xingming = "凉子";
    y.xuesheng.Nianling = 20;
    y.xuesheng.Fenshu = 98;
    //引用数据
    cout << "老师姓名:" << y.Xingming << endl
        << "老师年龄:" << y.Nianling << endl
        << "老师编号:" << y.id << endl
        << endl
        << "老师的学生" << y.xuesheng.Xingming << "分数" << y.xuesheng.Fenshu << "年龄" << y.xuesheng.Nianling;
    system("pause");
}

结构体做函数的参数

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 struct Laoshi {//定义老师
 6     string Xingming;
 7     int Nianling;
 8     int id;
 9 };
10 void quandayin(Laoshi y) {//值传递
11     cout << "通过函数传递值打印" << endl;
12     cout << "姓名:" << y.Xingming << endl
13         << "年龄:" << y.Nianling << endl
14         << "教师编号" << y.id << endl<<endl;
15 
16 }
17 void quandayin2(Laoshi* p) {//地址传递
18     cout << "通过函数传递地址打印" << endl;
19     cout << "姓名:" << p->Xingming << endl
20         << "年龄:" << p->Nianling << endl
21         << "教师编号" << p->id << endl;
22 }
23 int main() {
24     //system("chcp 65001");
25     //向结构体中添加数据
26     Laoshi y;
27     y.Xingming = "";
28     y.Nianling = 30;
29     y.id = 1;
30 
31     quandayin(y);//传递值
32     quandayin2(&y);//传递地址
33     system("pause");
34 }

const修饰结构体

 

 使用指针可以减少内存空间的占用,增加const可以防止误操作修改了改地址中的数据

posted @ 2022-09-27 10:25  遇见lilanglang  阅读(70)  评论(0)    收藏  举报