Day05.2021.11.2

案例:二维数组输出学生总分

image-20211102091306679

 int main() {
     //案例:输出成绩
     int arrays[3][3];
     for (int i = 0; i < sizeof(arrays)/sizeof(arrays[0]); i++){//用两个for输入学生成绩
         for (int j = 0; j < sizeof(arrays[0]) / sizeof(arrays[0][0]); j++) {
             cout << "请输入第" <<i+1<<"名学生第" <<j+1<<"科的成绩" << endl;
             cin >> arrays[i][j];
         }
     }
     for (int i = 0; i < sizeof(arrays) / sizeof(arrays[i]); i++) {//输出数组
         cout << "" << i + 1 << "名同学" << sizeof(arrays[0]) / sizeof(arrays[0][0]) << "科的成绩分别为: ";
         int sum = 0;//累加求总分
         for (int j = 0; j < sizeof(arrays[i]) / sizeof(arrays[i][j]); j++) {
             cout << arrays[i][j] << " ";
             sum += arrays[i][j];
         }
         cout << "他的总成绩为"<<sum<<"";
         cout << endl;
     }
     system("pause");
     return 0;
 }

 

image-20211102093229889

函数

把二维数组做参数写进函数的时候只能写静态的,规定几列,否则就需要指针操作

 void arraysTotal() {
     int arrays[3][3];
     for (int i = 0; i < sizeof(arrays) / sizeof(arrays[0]); i++) {//用两个for输入学生成绩
         for (int j = 0; j < sizeof(arrays[0]) / sizeof(arrays[0][0]); j++) {
             cout << "请输入第" << i + 1 << "名学生第" << j + 1 << "科的成绩" << endl;
             cin >> arrays[i][j];
         }
     }
     for (int i = 0; i < sizeof(arrays) / sizeof(arrays[i]); i++) {//输出数组
         cout << "" << i + 1 << "名同学" << sizeof(arrays[0]) / sizeof(arrays[0][0]) << "科的成绩分别为: ";
         int sum = 0;//累加求总分
         for (int j = 0; j < sizeof(arrays[i]) / sizeof(arrays[i][j]); j++) {
             cout << arrays[i][j] << " ";
             sum += arrays[i][j];
         }
         cout << "他的总成绩为" << sum << "";
         cout << endl;
     }
 }
 int main() {
     //案例:输出成绩
     arraysTotal();
     system("pause");
     return 0;
 }

 

与Java不同的是,需要把函数写在main前面,否则调用函数时会报错:找不到标识符

解决办法是,在开头写一个声明

 #include <iostream>
 using namespace std;
 ​
 void arraysTotal();//声明
 int main() {...}
 void arraysTotal() {...}

 

 

值传递

     //值传递:形参改变不影响实参
     int a = 10;
     int b = 20;
     int num1 = a, num2 = b;
     int index = num1;
     num1 = num2;
     num2 = index;
     cout << a << endl;
     cout << b << endl;

 

image-20211102100725427

分文件的编写

image-20211102110659991

  • 头文件写函数声明

 #include<iostream>
 using namespace std;//函数体中有cin,cout
void arraysTotal();//声明

 

  • cpp文件写方法体并include头文件

 
#include"method.h"void arraysTotal() {
     int arrays[3][3];
     for (int i = 0; i < sizeof(arrays) / sizeof(arrays[0]); i++) {//用两个for输入学生成绩
         for (int j = 0; j < sizeof(arrays[0]) / sizeof(arrays[0][0]); j++) {
             cout << "请输入第" << i + 1 << "名学生第" << j + 1 << "科的成绩" << endl;
             cin >> arrays[i][j];
         }
     }
     for (int i = 0; i < sizeof(arrays) / sizeof(arrays[i]); i++) {//输出数组
         cout << "" << i + 1 << "名同学" << sizeof(arrays[0]) / sizeof(arrays[0][0]) << "科的成绩分别为: ";
         int sum = 0;//累加求总分
         for (int j = 0; j < sizeof(arrays[i]) / sizeof(arrays[i][j]); j++) {
             cout << arrays[i][j] << " ";
             sum += arrays[i][j];
         }
         cout << "他的总成绩为" << sum << "";
         cout << endl;
     }
 }

 

  • 主函数include一个头文件就可以直接用了

 #include <iostream>
 using namespace std;//实际上我不写这两行也可以了,因为method.h里面有这两行
 ​
 #include"method.h"int main() {
     //案例:输出成绩
     arraysTotal();
     system("pause");
     return 0;
 }

 


 

关于为什么不能直接在头文件定义函数的原因:

如果这个头文件只被一个文件包含是不会出错的,但是一旦它被两个或更多的文件包含,则会报错.编译器会告诉你函数或变量重复定义!

指针

作用:通过指针间接访问内存

内存编号从0开始记录,一般用十六进制表示

可以用指针变量保存地址

image-20211102125808856

弹幕关于指针的形象理解

指针可以操作你声明的变量,当然也可以操作别的数据,比如,你玩一个单机游戏,血量数据在内存里放着,你要是找到了这个地址,通过指针就可以修改数据,换句话说,通过指针,你可以修改任何没有被保护的内存单元

定义指针

image-20211102133558284

指针占用的内存空间

在32位操作系统下不管什么类型的指针都占4个字节空间(x86就是32位)

image-20211102140844708

64位占8个字节空间(x64)

     //32位   
     cout << sizeof(int*) << endl;//4
     cout << sizeof(float*) << endl;//4
     cout << sizeof(double*) << endl;//4
     cout << sizeof(char*) << endl;//4

P57结束

来源:b站黑马

posted on 2021-11-02 14:16  托马斯源  阅读(66)  评论(0编辑  收藏  举报