C++ 编程出错的地方(考试选择题易错点)

2023-11-12


int IsSvn(int n)
{
    if (n % 7 == 0)
        return 1;
}

要判断这个数能不能被7整除,你就只返回1吗??!!!那岂不是只返回1,没有0的情况了!应该改为:

int IsSvn(int n)
{
    if (n % 7 == 0)
        return 1;
    else
        return 0;
}




#include<algorithm>
#include <iomanip>
#include <functional>
#include <iostream>
#include <iostream>
#include <vector>
using namespace std;
struct point
{
    int val;
    point(int x = 0) :val(x){} //初始化列表默认在point()没有输入参数时,val为0;但是不影响正常输入参数,如point(2),那么val就是2;
    bool operator<(const point &x) const{ return x.val < val; } //原先的operator为val<x.val , 改变成了x.val<val, 也就是反过来了,影响后面的sort函数关于point类型的排序;
    bool operator +(const point &x) const{ return val- x.val; }//1、巨大的陷阱,这个输出是bool型,只要不是0,都是1; 2、将operator + 改为了 -;
}a[10];
int main()
{
    int n = 5;
    for (int i = 1; i <= n; i++)
    {
        a[i] = point(i);
    }
    sort(a + 1, a + 1 + n);//本来sort默认升序排列,现在关于point的操作比较,因为运算符重载,大于变成了小与,所以就成了降序排列!!!
    cout << (a[1] + a[2]) << endl;//关于point操作,运算符重载,+变为-;
    system("pause");
    return 0;
}

输出结果为1.

再试试这个

struct point
{
    int val;
    point(int x = 0) :val(x){}
    bool operator<(const point &x) const{ return x.val < val; }
    int operator +(const point &x) const{ return val - x.val; }
}a[10];
int main()
{
    int b[4] = {1,4,2,3};
    sort(b, b + 4);
    int n = 5;
    for (int i = 1; i <= n; i++)
    {
        a[i] = point(i);
    }
    sort(a + 1, a + 1 + n);
    cout << (a[1] + a[3]) << endl;
    system("pause");
    return 0;
}

输出为2;



int main()
{

    int aa;
    cin >> aa;
    cout << aa << endl;
    fflush(stdin);\\这里要将缓冲区清空,否则上次输入的换行符会影响下面的输入,下面会直接判断有换行符要什么都不输出就结束!!
    int a[50];
    int i = 0;
    char c;
    while ((c = getchar()) != 10)
    {
        if (c >= '0'&&c <= '9' || c == '-')
        
        {
            ungetc(c, stdin);
            int tmp;
            cin >> tmp;
            a[i++] = tmp;

        }

    }

    for (int j = 0; j<i; j++)
    {
        cout << "a[" << j << "]:" << a[j] << endl;
    }
    system("pause");
    return 0;
}


const int a; int const a; 这两个写法是等同的,表示a是一个int常量。
const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
int const * a const;这个写法没有,倒是可以写成int const * const a;表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。

下面程序放到自己便一起看看!!!!哪些地方是错的!!


int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
只要指针指向的数值不是const型,那么就只能指向变量,不能指向常量!!(int *a, int * const a;)

    const int i = 10;
    int * j = &i;//编译错误,i是const,不能被可变的 *j来指;    
    int * j1 = (int*)&i;//正确,经过int*转换,j1不会再指向const int i. (int*)&i只是一个int * 的地址数值,不是const int *的地址数值了,发生了转换类型;
    int * j3 = (const int*)&i;//编译错误,i是const,不能被可变的 *j来指;    
    const int * j2 = (int*)&i;
    const int * j4 = (const int*)&i;
    

const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同
    int num1 = 23;
    const int *age3 = &num1;
    cout << *age3 << endl;//23
    const int *const age4 = &num1;
    int val1 = 101;
    age3 = &val1; // 编译通过
    cout << *age3 << endl;//101,age3是一个可变的地址,每次赋新的地址,那么它指向的数值就是不同的const区域,所以cout << *age3 << endl;输出不一样;但是还是不能*age3=某个数值来改变它指向的数值;
    *age3 = val1; // 编译报错



    int const *age4 = (int *)24;
    int const *age4 = 24;//int类型的值24 不能初始化 int const * 实体,指针。int不能初始化指针,转换为int* 就可以了。



    int * const age5 = (int *)25;

    int val2 = 102;

    age5 = &val2; // 编译报错

    *age5 = val2; // 编译通过

总结:

1)指针指向的数值如果不是const类型((int *a,      int * const a;)),那么就只能用变量来初始化,不可以用常量来初始化!

2)指针指向的数值如果是const类型((const int *a,     const int * const a;)),那么就可以用变量或者常量来初始化!

3)指针是const类型,那么指针就不能改变了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 编程出错的地方(考试选择题易错点) 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Centos(Linux)升级git最新版本

    在Linux Centos服务器上 如果使用的git版本过低 使用的时候可能会由于低版本不支持遇到各种问题 比如Centos7系统自带的git版本一般是1 8 3 1的 比较旧 通常建议升级git后再使用 下面我们来说下如果升级git最新版
  • Unity进阶--fsm状态机的使用笔记

    文章目录 Unity进阶 fsm状态机的使用笔记 第一种用基础的 if 播放实现动画控制 switch case实现状态机 使用状态机 Unity进阶 fsm状态机的使用笔记 第一种用基础的 if 播放实现动画控制 朴实无华 简单易懂 但是
  • 动态通讯录的实现

    大家在编写动态通讯录之前 我希望大家能够了解malloc和realloc的用法 https blog csdn net cdatreides article details 80522095 希望大家能够通过我的这篇博客了解malloc和r
  • PLC基础知识,详细解说PLC的优势,特点,功能,分类,应用领域及安装注意事项

    可编程控制器 Programmable Logic Controller 是计算机编程的一种 简称PLC 一 PLC的主要优势 1 现场可修改程序且编程方便简单 2 整体模块化结构后维修起来方便 3 比继电器控制装置更稳定和可靠 4 体积小
  • C++回调函数

    C 非静态成员函数的回调
  • NodeMcu arduino ESP8266WIFI 模块 WIFIAccessPoint 示例介绍,建立网络服务器进行TCP 请求 同步控制操作开发板的输出

    将ESP8266 创建网络服务器进行访问 同步控制操作开发板的输出 Create a WiFi access point and provide a web server on it 译 创建WiFi接入点并在其上提供web服务器 incl
  • 一个好用的8字节哈希算法

    http www isthe com chongo tech comp fnv index html
  • Matlab查询表格中数据并对数据进行对比

    想查查自己在年级每个成绩排多少名 然后编了这样一个程序 a 算法分析与设计实验 记录学习算法分析与设计实验的总人数 j 0 记录比这个分大的人数 k 0 for i 1 26863 比较两个字符串是否相等 if strcmp Untitle
  • Windows 下 T-Kernel QEMU模拟器使用

    google了一下 没有找到T Kernel QEMU模拟器使用介绍的内容 只有T Kernel 自己的文档 那就简单的介绍一下 1 下载对应的T Kernel代码包 参考以前的文档 http blog csdn net robertson
  • Python:用指定的字拼成这个字本身

    字 字 字字字字字字字字字字字 字 字 字字字字字字字 字 字 字字字字字字字字字字字 字 字 字字字 符 符 符符符符 符符符符符 符 符 符 符 符 符 符 符 符符 符符符符符符符 符 符 符 符 符 符 符 符 符 符 符 符 符符
  • 逻辑设备名到物理设备名的映射实现

    为了实现设备的无关性 当应用程序请求使用I O设备时 应当用逻辑设备名 但系统值识别物理设备名 所以应在系统中需要配置一张逻辑设备表 用于将逻辑设备名映射到物理设备名 逻辑设备表LUT Logical Unit Table 在逻辑设备表中
  • 使用Anaconda创建python环境 & 常见错误

    目录 使用anaconda创建python环境 1 流程 1 使用 cmd 命令打开终端 2 执行 conda 命令进入conda环境 3 执行 conda creat name 环境名 python python版本 命令创建环境 2 常
  • 在vue中使用for循环有异步请求,每次都只获取到最后一个数据解决办法

    我预想是将标签数组 dynamicTags 使用for循环取出每个值 在遍历标签数组将值一一添加到数据库中 奈何for循环结束了 才去执行put请求 这就导致了只添了数组的最后一个值 原因是axios put请求是异步请求 解决方案 使用递
  • 分析整理文献的具体步骤_VOSviewer文献综述

    文献综述在科技论文和学位论文中占据着重要地位 是论文中的一个重要且不可或缺的部分 它是研究者在对某一学科 专业或专题的大量文献进行阅读 整理 筛选 分析 综合和提炼的基础上 用自己的语言综合叙述研究状况的情报研究成果 因此 文献综述的好坏直
  • 计算宽度_桥梁有效宽度计算,看看很有用!

    有效分布宽度实质上是剪力滞效应的反应 由于目前桥梁设计多用二维平面解析 故荷载的有效分布宽度仍需要计算 不过还有很多深层次问题还不能合理解答 有待进一步研究和探讨 各中间跨正弯矩段取该跨计算跨径的0 2倍 边跨正弯矩段取该跨计算跨径的0 2
  • 回溯法-装载问题

    子集树问题 和 子集树的0 1背包问题类似 但是没有考虑价格 include
  • 【Parallels Desktop】解决Sorry, This Application Cannot Be Run Under A Virtual Machine

    问题描述 解决步骤 Win R 或Cmd R 打开 运行 窗口 输入regedit并点击 确定 打开注册表编辑器 依次展开HKEY LOCAL MACHINE HARDWARE ACPI DSDT文件夹 鼠标右键点击PRLS 选择 重命名
  • Redis第二讲 Redis数据持久化AOF和RDB

    RDB快照 snapshot 在默认情况下 Redis 将内存数据库快照保存在名字为 dump rdb 的二进制文件中 你可以对 Redis 进行设置 让它在 N 秒内数据集至少有 M 个改动 这一条件被满足时 自动保存一次数据集 save
  • 【修仙境界】等级划分

    文章目录 一 下境界 1 炼气 一共13层 2 筑基 分初 中 后期和大圆满 3 结丹 分初 中 后期和大圆满 4 元婴 分初 中 后期和大圆满 5 化神 分初 中 后期和大圆满 二 中境界 1 炼虚 分初 中 后期和大圆满 2 合体 分初
  • C++ 编程出错的地方(考试选择题易错点)

    一 int IsSvn int n if n 7 0 return 1 要判断这个数能不能被7整除 你就只返回1吗 那岂不是只返回1 没有0的情况了 应该改为 int IsSvn int n if n 7 0 return 1 else r