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++ 编程出错的地方(考试选择题易错点) 的相关文章

  • 谁能建议我一种在 C++ 中分割名称的简单方法

    我一直在尝试将名称分为名字和姓氏 但我确信我的实现就简单性而言并不是最好的 string name John Smith string first string last name name find getting lastname fo
  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 为什么这个没有特殊字符的正则表达式会匹配更长的字符串?

    我正在使用此方法来尝试查找匹配项 例如 Regex Match A2 TS OIL TS OIL RegexOptions IgnoreCase Success 我得到了真实的结果 我很困惑 我认为这应该返回 false 因为模式中没有特殊
  • 动态生成的控件 ID 返回为 NULL

    我可以在 Page PreInit 函数中创建动态控件 如何检索控件及其 ID 我的 C 代码用于创建动态控件之一 var btn new WebForms Button btn Text btn ID Addmore btn Click
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • C++ php 和静态库

    我创建了一个library a 其中包含 cpp 和 h 文件 其中包含很多类 嵌套类和方法 我想在 php 示例中包含这个静态库并尝试使用它 我想提一下 我是 php 新手 我已经在 test cpp 文件中测试了我的 libray a
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 运行选定的代码生成器时出错:“未将对象引用设置到对象的实例。”错误?

    我已经尝试了所有解决方案 例如修复 VS 2013 但没有用 当您通过右键单击控制器文件夹来创建控制器并添加控制器时 然后右键单击新创建的控制器的操作并选择添加视图 当我尝试创建视图时 就会发生这种情况 它不是一个新项目 而是一个现有项目
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • C++ Streambuf 方法可以抛出异常吗?

    我正在尝试找到一种方法来获取读取或写入流的字符数 即使存在错误并且读 写结束时间较短 该方法也是可靠的 我正在做这样的事情 return stream rdbuf gt sputn buffer buffer size 但如果streamb
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i

随机推荐

  • 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