IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 程序设计与算法(一)C语言程序设计 -> 正文阅读

[C++知识库]程序设计与算法(一)C语言程序设计

第十周(笔记)

10.1 结构(struct)

  1. 结构的定义
    • 用"struct" 关键字来定义一个"结构" ,也就定义了一个新的数据类型:
    • Student即成为自定义类型的名字,可以用来定义变量,例如Student s,s1;
    • 两个同类型的结构变量,可以互相赋值,但结构变量之间不能用“==”、“!=”、“<”、“>”、“<=”、“>=”进行比较运算(等以后学习面向对象的时候就可以比较了)
    • 一般来说,一个结构变量所占的内存空间的大小,就是结构中所有成员变量大小之和。结构变量中的各个成员变量在内存中一般是连续存放的。以上例来说,id占4个字节,szName占20个字节,一共24个字节
struct Student(结构名) {
    unsigned(类型名) ID(成员变量名);
    float szName[20];
    ...
};
  1. 结构中的结构
struct Date {
    int year;
    int month;
    int day;
};
struct StudentEx {
    unsigned ID;
    char szName[20];
    float fGPA;
    Date birthday;
};
  1. 指向本结构类型的变量的指针
struct Employee {
    string name;
    int age;
    int salary;
    Employee * next;
};
  1. 访问结构变量的成员变量
    • 一个结构变量的成员变量,可以完全和一个普通变量一样来使用,也可以取得其地址。使用形式:结构变量名 . 成员变量名
StudentEx stu;
cin >> stu.fGPA;
stu.ID = 12345;
strcpy(stu.szName,"Tom");
cout << stu.fGPA;
stu.birthday.year = 1984;
unsigned int * p = & stu.ID; //p指向stu中的ID 成员变量

  1. 结构变量的初始化
    • 结构变量可以在定义时进行初始化;比如StudentEx stu = {1234,“tom”,3.78,{1984,12,28}}:
  2. 结构数组
StudentEx MyClass[50];
StudentEx MyClass2[50] = {{1234,"tom",3.78,{1984,12,28}},
    {1235,"jack",3.78,{1934,2,8}},//结构数组初始化
    ...
};
MyClass[1].ID = 1267;
MyClass[2].birthday.year = 1986;
int n = MyClass[2].birthday.month;
cin >> MyClass[0].szName;
  1. 指向结构变量的指针
    • 定义指向结构变量的指针:结构名 * 指针变量名
    StudentEx * pStudent;
    StudentEx Stu1;
    pStudent = & Stu1;
    StudentEx Stu2 = * pStudent;
  1. 通过指针,访问其指向结构变量的成员变量
    • 指针->成员变量名或者==( * 指针).成员变量名==
    StudentEx Stu;
    StudentEx * pStu;
    pStu = & stu;
    pStu->ID = 12345;
    (*pStu).fGPA = 3.48;
    cout << Stu.ID << endl; //输出12345
    cout << Stu.fGPA << endl; // 输出3.48

10.2 全局变量、局部变量、静态变量

  1. 全局变量和局部变量
    • 定义在函数内部的变量叫局部变量(函数的形参也是局部变量)
    • 定义在所有函数的外面的变量叫全局变量
    • 全局变量在所有函数中均可以使用,局部变量只能在定义它的函数内部使用
  2. 静态变量
    • 全局变量都是静态变量。局部变量定义时如果前面加了“static"关键字,则该变量也成为静态变量
    • 静态变量的存放地址,在整个程序运行期间,都是固定不变的,非静态变量(一定是局部变量)地址每次函数调用时都可能不同,在函数的一次执行期间不变
    • 如果未明确初始化,则静态变量会被自动初始化成全0(每个bit都是0),局部非静态的值则随机
//示例
#include <iostream>
using namespace std;
void func() {
    static int n = 4;
    cout << n << endl;
    n++;

}
int main()
{
    func();func();func();
    return 0;
}
//输出结果
//4
//5
//6



10.3 变量的作用域和生存期

  1. 标识符的作用域
    • 变量名、函数名、类型名统称为”标识符“。一个标识符能够起作用的范围叫做该标识符的作用域
    • 在一个标识符的作用域之外使用该标识符,会导致"标识符没有定义"的编译错误。使用标识符语句,必须出现在他们的声明或定义之后
    • 在单文件的程序中,结构、函数和全局变量的作用域是其定义所在的整个文件
    • 函数形参的作用域是整个函数
    • 局部变量的作用域,是从定义它的语句开始,到包含他的最内层的那一对大括号”{}“的右大括号”}“为止
    • for循环里定义的循环控制变量,其作用域就是整个for循环
    • 同名标识符的作用域,可能一个被另一个包含。则在小的作用域里,作用域大的那个标识符被屏蔽,不起作用
  2. 变量的生存期
    • 所谓变量的”生存期“,指的是在此期间,变量占有内存空间,其占有的内存空间只能归它使用,不会被用来存放别的东西,而变量生存期终止,就意味着该变量不在占有内存空间,他原来占有的内存空间,随时可能被派作他用。
    • 全局变量的生存期,从程序被装入内存开始到整个程序结束。
    • 静态局部变量的生存期,从定义它语句第一次被执行开始,到整个程序结束位置
    • 函数形参的生存期从函数执行开始,到函数返回结束。非静态局部变量的生存期,从执行到定义它的语句开始,一旦程序执行到了它的作用域之外,其生存期即终止。
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 11:49:05  更:2021-08-07 11:49:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 2:37:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码