简单说一下const在各个位置的含义

本文详细阐述了const在函数各个位置的应用,包括返回值、参数、类成员函数及指针定义的不同含义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

const常量,在函数各个位置有不同含义!简单写一下可能有纰漏

一.const在函数的各个位置:

1.const在函数返回值前,表明返回值为const

const int getNum(){return i;}    // 表示返回值为const


2.const在参数前面,表明参数为const,在函数体不能改变

int getNum(const int num){}   //num在函数体中不能被改变


3.const在函数体后面,表示是类的常成员函数(函数体中可以把this看做是const,类的成员不能改变,只能调用其他常成员函数)

public int getNum()const;


二.const在指针定义的各个位置:

const int a = 2;
const int* p;
这种情况表示p是一个指向const int的指针。p可以改变,但是它指向的内容是不可变的。

int const* p = &a;
这种情况表示p是一个指向int的const指针。p的地址不可以改变,但是它指向的内容可变。比如*p = 3;

const int const *p = &a;
这种情况就很好理解了,p是一个指向const int的const指针。它指向的内容,和自身的地址都不可变。

其实有一个技巧,就是const靠近哪个(从左向右)哪个就是不可变的。
<think>嗯,用户想要一个带有详细注释的C++俄罗斯方块代码,适合初学者的。首先,我需要回忆一下俄罗斯方块的基本结构。通常包括游戏循环、方块生成、碰撞检测、旋转逻辑、消行处理等部分。 然后,考虑使用什么库。对于控制台应用,Windows下可以用<windows.h>来控制光标位置和颜色,这样比较方便。不过跨平台的话可能需要其他库,但用户可能是在Windows环境下学习,所以先使用Windows API。 接下来,确定数据结构。游戏区域可以用二维数组表示,比如宽10,高20。每个方块的状态用字符表示,比如' '为空,'A'为活动的方块,'#'为固定的方块。 方块的形状,经典的俄罗斯方块有7种,可以用数组存储它们的形状。每个形状在不同旋转状态下的表示需要考虑,比如使用4x4的矩阵。 然后是游戏循环的结构。需要处理输入,更新方块位置,检查碰撞,固定方块,消行,计分等。同时,要定时让方块自动下落,可以用Sleep函数控制速度。 关于代码结构,主函数初始化后进入循环,处理键盘输入,比如左右移动、旋转、快速下落。每次循环更新游戏区域,渲染到控制台。 需要详细注释,每个函数的作用,关键步骤的解释。比如,在旋转时如何计算新的坐标,碰撞检测如何判断边界和其他方块。 可能遇到的难点是旋转的逻辑和碰撞检测的正确性。要确保旋转后的方块不会超出边界或与其他方块重叠。另外,消行时要检查每一行是否填满,然后删除并增加新的空行。 最后,测试代码是否能够正确运行,检查各个功能是否正常,比如旋转、消行、游戏结束条件等。确保注释清晰,让初学者能一步步理解代码的执行过程。</think>以下是用C++编写的简单俄罗斯方块游戏代码,包含详细注释明每个部分的功能: ```cpp #include <iostream> #include <vector> #include <windows.h> // 用于控制台操作和颜色设置 #include <conio.h> // 用于键盘输入检测 using namespace std; // 游戏区域尺寸常量 const int WIDTH = 10; const int HEIGHT = 20; // 方块结构体 struct Point { int x, y; }; vector<vector<char>> gameArea(HEIGHT, vector<char>(WIDTH, ' ')); // 游戏区域二维数组 vector<vector<char>> currentBlock(4, vector<char>(4, ' ')); // 当前下落方块 Point blockPos; // 方块当前位置 int score = 0; // 游戏得分 // 七种经典方块形状[^1] vector<vector<vector<vector<char>>>> blocks = { // I型方块 {{{'A','A','A','A'}, {' ',' ',' ',' '}, {' ',' ',' ',' '}, {' ',' ',' ',' '}}}, // O型方块 {{{'A','A',' ',' '}, {'A','A',' ',' '}, {' ',' ',' ',' '}, {' ',' ',' ',' '}}}, // T型方块 {{{'A','A','A',' '}, {' ','A',' ',' '}, {' ',' ',' ',' '}, {' ',' ',' ',' '}}}, // 其他方块形状... }; // 初始化新方块 void spawnNewBlock() { currentBlock = blocks[rand() % blocks.size()]; // 随机选择方块 blockPos = {WIDTH/2-2, 0}; // 初始位置在顶部中间 } // 碰撞检测 bool checkCollision() { for(int i=0; i<4; i++){ for(int j=0; j<4; j++){ if(currentBlock[i][j] == 'A'){ int newX = blockPos.x + j; int newY = blockPos.y + i; // 检测边界和已有方块碰撞 if(newX <0 || newX >= WIDTH || newY >= HEIGHT || (newY >=0 && gameArea[newY][newX] != ' ')) return true; } } } return false; } // 合并方块到游戏区域 void mergeBlock() { for(int i=0; i<4; i++){ for(int j=0; j<4; j++){ if(currentBlock[i][j] == 'A'){ gameArea[blockPos.y+i][blockPos.x+j] = '#'; } } } } // 消除满行 void clearLines() { for(int row=HEIGHT-1; row>=0; row--){ bool full = true; for(int col=0; col<WIDTH; col++){ if(gameArea[row][col] == ' '){ full = false; break; } } if(full){ gameArea.erase(gameArea.begin()+row); gameArea.insert(gameArea.begin(), vector<char>(WIDTH, ' ')); score += 100; } } } // 绘制游戏界面 void draw() { system("cls"); // 清屏 // 绘制游戏区域边框 for(int i=0; i<HEIGHT; i++){ cout << "|"; for(int j=0; j<WIDTH; j++){ cout << (gameArea[i][j] == 'A' ? currentBlock[i-blockPos.y][j-blockPos.x] : gameArea[i][j]); } cout << "|" << endl; } cout << "Score: " << score << endl; } int main() { srand(time(0)); spawnNewBlock(); while(true) { // 处理输入 if(_kbhit()){ char key = _getch(); Point newPos = blockPos; switch(toupper(key)){ case 'A': newPos.x--; break; // 左移 case 'D': newPos.x++; break; // 右移 case 'S': newPos.y++; break; // 快速下落 case 'W': /* 旋转逻辑 */ break; case 'Q': return 0; // 退出 } // 移动后碰撞检测 blockPos = newPos; if(checkCollision()) blockPos = newPos; } // 方块自动下落 blockPos.y++; if(checkCollision()){ blockPos.y--; mergeBlock(); clearLines(); spawnNewBlock(); if(checkCollision()) break; // 游戏结束 } draw(); Sleep(300); // 控制下落速度 } cout << "Game Over! Final score: " << score << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值