IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C++输入cin模版代码以及const与指针的关系 -> 正文阅读

[数据结构与算法]C++输入cin模版代码以及const与指针的关系

C++处理输入异常

while (!(cin >> factor))    // bad input
{
    cin.clear();
    while (cin.get() != '\n')
        continue;
    cout << "Bad input; Please enter a number: ";
}

数组处理函数的常用处理方式
修改数组:
void f_modify(double ar[], int n);
不修改数组:
void f_no_change(const ar[], int n);

此外还有另一种处理数组的方法,即指定元素区间(range),这个可以通过传递两个指针来完成:一个指针标识数组的开头,另一个指针标识数组的尾部。。例如C++标准模版库STL将区间方法广义化了,STL方法使用超尾的概念:即对于数组而言,标识数组结尾的参数将是指向最后一个元素后面的指针。

#include <iostream>

const int ArSize = 8;

int sum_arr(const int *begin, const int *end);

int main() {
    using namespace std;
    int cookies[ArSize] = {1, 2, 4, 8, 16, 32, 64, 128};
    // some systems require preceding int with static to
    // enable array initialization

    int sum = sum_arr(cookies, cookies + ArSize);
    cout << "Total cookies eaten: " << sum << endl;
    sum = sum_arr(cookies, cookies + 3);    // first 3 elements
    cout << "First three eaters ate " << sum << " cookies.\n";
    sum = sum_arr(cookies + 4, cookies + 8);    // last 4 elements
    cout << "Last four eaters ate " << sum << " cookies.\n";
    return 0;
}

// return the sum of an integer array
int sum_arr(const int* begin, const int* end) {
    const int* pt;
    int total = 0;
    for (pt = begin; pt != end; pt++) {
        total += *pt;
    }
    return total;
}

指针与常量

int age = 29;
const int* pt = &age;

上述代码表面 pt 指向一个 const int ,因此不能用 pt 来修改这个值,即 *pt 的值为 const,不能修改,以下代码是无效的

*pt += 1;
cin >> *pt;

但是 age 变量是可以改变的, 即以下代码是有效的。

age = 20;

我们需要注意另外一种情况,这里可以用以下代码来说明:

int gorp = 16;
int chips = 12;
const int* p_snack = &gorp;
*p_snack = 20; // invaild
p_snack = &chips; // valid

int gorp = 16;
int chips = 12;
int const * p_snack = &gorp;
*p_snack = 20; // vaild
p_snack = &chips; // invalid

int gorp = 16;
int chips = 12;
const int const * p_snack = &gorp;
*p_snack = 20; // invaild
p_snack = &chips; // invalid

另外还要注意以下两种情况:

const float g_earth = 9.80;
const float* pe = &g_earth; // vaild

const float g_moon = 1.63;
float* pm = &g_moon; // invaild
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:33:23  更:2021-11-29 16:35:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:17:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码