前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++系列笔记(二)

C++系列笔记(二)

作者头像
墨明棋妙27
发布2022-08-24 15:22:19
1930
发布2022-08-24 15:22:19
举报
文章被收录于专栏:1996

导读】《21天学通C++》这本书通过大量精小短悍的程序详细而全面的阐述了C++的基本概念和技术,包括管理输入/输出、循环和数组、面向对象编程、模板、使用标准模板库以及创建C++应用程序等。这些内容被组织成结构合理、联系紧密的章节,每章都可在1小时内阅读完毕,都提供了示例程序清单,并辅以示例输出和代码分析,以阐述该章介绍的主题。 本文是系列笔记的第二篇,欢迎各位阅读指正!

指针 指针是一种指向内存单元的特殊变量。声明指针如下:

int *pInteger = NULL; #初始化指针

使用引用运算符(&)获取变量的地址 可以声明一个int指针来储存变量的地址:

int* pInteger = &age 可将不同的内存地址赋给同一个指针变量,让它指向不同的值,如下个程序:

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main()
{
        int age = 30;
        int* pInteger = &age;
        cout << "pInteger points to Age now" << endl;
        cout << "pInteger=0x" << hex << pInteger << endl;
        int dogsage = 9;
        pInteger = &dogsage;
        cout << "pInteger dogsage=0x" << hex << pInteger << endl;
        return 0;
}

使用解除引用运算符(星号)访问指向的数据,如: *pInteger #访问数据 将sizeof()用于指针时,结果与指针指向的变量类型无关,而是取决于使用的编译器和针对的操作系统。 动态内存分配 使用new来动态的分配新的内存块。如果成功,new将返回指向一个指针,指向分配的内存;需要指定要为哪种数据类型分配内存。 Type* Pointer = new Type; #Type为类型 还可以指定为多少个元素分配内存 Type* Pointer = new Type[NumElements]例如:int* Pointer = new int[10];使用new分配的内存最终都需要使用对应的delete进行释放 delete Pointer; delete[] Pointer PS: delete只能释放new创建的内存,而不是用于包含任何地址的内存。 将指针递增或递减时,其包含的地址将增加或减少指向的数据类型的sizeof(并不一定是1字节)。这样,编译器将确保指针不会指向数据的中间或末尾,而只会指向数据的开头。如下: Type* pType = Address; 则执行++PType后,PType将包含指向Address+sizeof(Type) 示例代码如下:

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main()
{
        cout << "how many integers you wish to enter?";
        int InputNums = 0;
        cin >> InputNums;
        int*pNumbers = new int[InputNums];
        int*pCopy = pNumbers;   //保存了该地址的拷贝
        cout << "sucessfully allocated memory for" << InputNums << "integers" << endl;
        for (int Index = 0; Index < InputNums; ++Index)
        {
               cout << "enter number" << Index << ":";
               cin >> *(pNumbers + Index);
        }
        cout << "displaying all numbers input:" << endl;
        for (int Index = 0, int* pCopy = pNumbers; Index < InputNums; ++Index)
        {
               cout << *(pCopy++) << ":" << endl;
        }
        delete[] pNumbers;
        return 0;
}

将关键字const用于指针 const指针有如下三种: ①指针指向的数据为常量,不能修改,但可以修改指针的地址,即指针可以指向其它地方

代码语言:javascript
复制
int HoursInDay = 24;
const int* pInteger = & HoursInDay

②指针包含的地址是常量,不能修改,但可以修改指针指向的数据

代码语言:javascript
复制
int  HoursInDay  =24;
int* const pInteger = & HoursInDay

③指针包含的地址及它指向的值都是常量,不能修改

代码语言:javascript
复制
int  HoursInDay  = 24;
const int* const pInteger = & HoursInDay

务必初始化指针变量,如果不能将指针初始化为new返回的有效地址或它有效变量,可将其初始化为NULL。 检查使用new发出的分配请求是否得到满足 C++提供了两种确保指针有效的方法,默认方法是使用异常,即如果内存分配失败,将引发std::bad_alloc异常。这将导致应用程序中断执行。异常处理有以下两种方法:

代码语言:javascript
复制
//第一种
#include<iostream>
using namespace std;
int main()
{
        try
        {
               int* pAge = new int[5368709111];
               delete[] pAge;
        }
        catch (bad_alloc)
        {
               cout << "memory failed.ending program" << endl;
        }
        return 0;
}
代码语言:javascript
复制
//第二种
#include<iostream>
using namespace std;
int main()
{
        int* pAge = new(nothrow) int[0x1fffffff];
        if (pAge)
        {
               delete[] pAge;
        }
        else
        cout << "memory allocation failed" << endl;
        return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机视觉CV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,助力维护团队卓越代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档