c - 何时在 C 函数中使用 const
问题描述
我一直在为明天的期中学习,我遇到了这个问题,我无法在答案 2 和 3 之间做出决定。PlayingCard
是一个struct
,并且HANDSIZE
是一个值为 5 的常数。
正确的答案显然是选项 2,但我和一个朋友都认为这里更好的选择是 3,因为我们被告知,当我们知道变量不会被更改时,我们应该使用 const 作为良好的编程习惯. 既然这里没有改变,为什么选项 2 会比选项 3 更好?
/* QUESTION: What should go for the definition of isFlush that detects flushes
1: Nothing
2: bool isFlush(PlayingCard hand[HANDSIZE]) {
3: bool isFlush(const PlayingCard hand[HANDSIZE]) {
4: bool isFlush(PlayingCard ** hand) {
5: bool isFlush(const PlayingCard ** hand) {
6: bool isFlush(PlayingCard *** hand) {
7: bool isFlush(CardFace * hand) {
8: bool isFlush(CardSuit * hand) {
9: bool isFlush(CardSuit suits[HANDSIZE]) {
*/
// missing function defintion
CardSuit suit = hand[0].suit;
for (int i = 1; i < HANDSIZE; i++ ) {
if (suit != hand[i].suit) {
return false;
}
}
return true;
}
解决方案
正如我们被告知,
const
当我们知道变量不会被更改时,我们应该将其用作良好的编程习惯
这是真的,但仅当您将指针传递给变量时。如果按值传递变量,我看不到任何优势。
在这种情况下,我同意最佳答案是 3。问问题的作者为什么正确答案是 2 可能为时已晚。
推荐阅读
- css - 如何使用 CSS 创建倾斜的图像?
- java - 如何使用 OpenCV 和 Java 将视频保存到文件中?
- android-studio - 如何在 Android Studio 中使用翻译编辑器进行翻译?
- c# - ReactJS/ASP.Net Core 2.1 版本 CORS 错误
- java - 在 Spring Data 中重置 @OneToMany 中的子级列表
- python - 如何使用 Fipy 声明二维边界
- c - 可以组合两个字符串,每个字符串的长度为 PATH_MAX?
- c# - 无法从一个 TCP 端口向 TCP 侦听器发送多条消息
- python - os.listdir() 将字符添加到文件名的开头?
- architecture - 时间/节奏编排概念