Day05.2021.11.2
案例:二维数组输出学生总分
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; }
函数
把二维数组做参数写进函数的时候只能写静态的,规定几列,否则就需要指针操作
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;
分文件的编写
-
头文件写函数声明
#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开始记录,一般用十六进制表示
可以用指针变量保存地址
弹幕关于指针的形象理解
指针可以操作你声明的变量,当然也可以操作别的数据,比如,你玩一个单机游戏,血量数据在内存里放着,你要是找到了这个地址,通过指针就可以修改数据,换句话说,通过指针,你可以修改任何没有被保护的内存单元
定义指针
指针占用的内存空间
在32位操作系统下不管什么类型的指针都占4个字节空间(x86就是32位)
64位占8个字节空间(x64)
//32位 cout << sizeof(int*) << endl;//4 cout << sizeof(float*) << endl;//4 cout << sizeof(double*) << endl;//4 cout << sizeof(char*) << endl;//4