C++学习笔记 堆中的指针数组

C++之指针、引用、数组、堆区栈区 指针 指针(pointer)是一个值为内存地址的变量(或数据对象) 基本用法 数据类型 * 指针变量名 如 int * ptr_num 注意: Int* p 写法偏向地址 P是一个地址变量 表示一个十六进制地址 Int *p偏向值 *p是一个整型变量 能够表示一个整型值 给指针赋值只能使用&符号 空指针(null pointer)空指针不指向任何对象,在试图使用一个指针之前首先检查是否为... 阅读详情

  1.栈的内存都有有限的,但是堆得内存很大,为避免栈的内存开销,我们都把整个对象都存放在
堆中,那么在堆中区声明一个对象方法是:
    area *one=new area;
new:  操作符,它用来生成某种类型的一个对象,通常这个对象在堆中生成。
* one:声明了一个指向堆中的新对象的指针one。
area:(new后面的)代表在堆中创建的属于类area的对象。
因为堆中所有成员都是匿名的,因此它没有名字,不能按名字访问,只能通过指针(one)访问。


2.删除堆中的数组:
   只需要删除delete[]即可,然后后面加上数组名就可以,
   比如:我们要删除数组one,那么就是:delete[]one;
注意:
  1. 如果忘记输入[];那么删除的只是one[0];改错误带来的后果就是内存泄露。
  2. 即使是指针也不能越界操作数组。

3.容易混淆的概念:
  a.   area one[10000]  :声明一个由10000个area对象组成的数组,数组名字叫one。
  b.   area *one[10000] :声明一个由10000个指向area的指针组成的数组,数组名字为one。
  c.   area *one=new area[10000]:该指针指向由1000个area对象组成的一个数组。

C方式的one是一个指向数组的指针,也就是说one保存的是数组第一个元素的地址。

实例1.b方式:

#include <iostream>
using namespace std;
class area
{
public:
// area(int i, int w){length=i, width=w; cout<<"调用构造函数设置长和宽的值"<<endl;}
 //本例没有对数组进行初始化,因此不需要声明构造函数,使用系统默认的就可。
 ~area(){cout<<"调用析构函数释放内存"<<endl;}
 int get() const{return  length * width ;}
 void set(int i, int w){length=i, width=w;}
private:
 int length;
 int width;
};
void main()
{
 area *one[10000]; //声明一个10000个指向类area的指针组成的数组。即:指针数组。
 int  i;
    area *pone;  //声明一个指向类area的指针
 for (i=0;i<10000;i++)
 {
   pone=new area;//在堆中创建对象,循环一次创建一个对象(10000个对象),然后通过指针pone来访问该对象,因为堆中的所有东西
                 //都是匿名的,因此不能按照名字访问,只能通过指针访问。
   pone->set(i, i*2);  //用指向该对象的指针pone 来访问堆中对象的成员函数并设置该函数的两个参数。
   one[i]=pone;         //将指向该对象的指针的内存地址赋给一个数组元素。
   cout<<"area["<<i<<"]:";
   cout<<one[i]->get()<<endl; 
        //数组元素保存的是堆中对象的内存地址,所以必须用指针运算符->来访问该对象的成员函数,这表示一次间接访问,
        //栈中保存的10000个数组元素循环访问依次建立起的10000个对象的成员函数,并将函数的返回值输出。
   delete pone;
 
 }

}


实例2 c方式:
#include <iostream>
using namespace std;
class area
{
public:
// area(int i, int w){length=i, width=w; cout<<"调用构造函数设置长和宽的值"<<endl;}
 //本例没有对数组进行初始化,因此不需要声明构造函数,使用系统默认的就可。
 ~area(){cout<<"调用析构函数释放内存"<<endl;}
 int get() const{return  length * width ;}
 void set(int i, int w){length=i, width=w;}
private:
 int length;
 int width;
};
void main()
{
 area *one=new area[10000];  //声明一个有10000个area对象组成的数组,通过调用new操作符把整个数组创建在堆区中。
 int i;
  for (i=0;i<10000;i++)
  {
    one[i].set(i, i*2);   //设置堆中每个对象的参数
    cout<<"area["<<i<<"]:";
    cout<<one[i].get()<<endl; //调用每个对象的get函数并且输出get函数的返回值
    cout<<one->get()<<endl;    //指针one保存的数组第一个元素的地址,因此改行始终输出数组的第一个元素的值
  }
  system("pause");

delete []one;
 
 

}

 

Python实现课程时间表 用Python实现课程表功能 阅读详情

相关推荐

PD虚拟机安装CentOS7后必做的Parallels Tools配置指南(附常见错误解决)

本文详细指导在Mac的Parallels Desktop虚拟机中安装CentOS 7后如何高效配置Parallels Tools,包括环境准备、镜像挂载、依赖问题解决及性能优化。特别针对常见错误如挂载失败、依赖缺失等提供实用解决方案,帮助用户实现主机与虚拟机间的无缝交互和显示优化。

weixin_29288313的博客 299

C++指针和数组(值传递,地址传递)

初学者

weixin_49946607的博客 1500

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 528

c++在堆中创建指针数组

LinkedList1** pArr= new LinkedList1*[10]();数组里的元素为指针,所以sho 首元素地址用2级指针来接收

weixin_37520565的博客 1089

QGIS效率提升神器:qgis_mcp插件+VSCode联合工作流配置全解析

本文详细解析了如何通过配置qgis_mcp插件与VSCode的联合工作流,实现语音控制和代码自动化来大幅提升QGIS操作效率。该方案将自然语言交互与现代编辑器生态结合,为地理信息专业人士构建了智能、高效的全新工作模式,彻底改变传统GIS操作方式。

weixin_29228203的博客 189

通义千问AI模型对接飞书机器人-集成飞书机器人(2-2)

http请求地址上一篇百炼平台配置的应用地址。

hefaji的博客 1916

c++动态申请指针数组

c++中动态申请指针数组遇到的问题 当动态申请指针数组时需要用到二级指针,比如 int** a = new int*[n]; 这个时候,指针数组中的每一个单指针还没有申请空间,因此需要用一个循环来为单指针分配空间 for(int i = 0;i < n;i ++) { a[i] = new int; } ...

weixin_45465323的博客 2560

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

c++ 在堆区 创建二维数组

首先说结论 : int(*p)[2] = new int[3][2]{ {1,2},{3,4},{5,6} }; // 或者 int(*p)[2] = new int[3][2]; 左边的意思是申明了一个数组指针,该指针指向一个数组,如int (*p)[2]的意思为申明一个指针p指向一个长度为2的数组,该数组的元素类型为int。int(*p)[2] = new int[3][2];这里p指针指向的长度为2的数组,如果你把p指针加1后输出p指针会发现其结果为地址,且输出的地址加了8个字节,也...

weixin_55446901的博客 2183

龙芯3A5000开发板PMON升级UEFI固件实战指南

固件是计算机硬件与操作系统之间的关键桥梁,负责初始化硬件并引导系统启动。其工作原理是在上电后执行自检、加载引导程序,最终将控制权移交操作系统。在国产化平台中,采用标准化的UEFI固件具有重要技术价值,它能提供图形化配置界面、统一硬件驱动模型,并支持安全启动等现代特性,从而显著提升硬件兼容性与系统管理效率。这一技术广泛应用于PC、服务器及嵌入式设备,尤其在需要运行银河麒麟等主流操作系统的龙芯开发板场景中,将传统PMON固件升级至UEFI,能实现更流畅的系统安装与更稳定的运行体验。本文基于固件升级与UEFI引导

weixin_42664597的博客 561

从数据到行为的可控暴露:SAP RAP 中的 BO Projection 与 BO Interface 全面实践指南

本文系统梳理了ABAP RAP中BO Projection与BO Interface的定位与实现方式。BO Projection面向业务服务(如UI/API),通过CDS投影视图(as projection on)和行为定义裁剪字段与操作,实现差异化暴露;BO Interface则为EML代码和跨组件复用提供稳定访问层,使用transactional_interface标识。两者均遵循C_/I_命名规范,通过分层设计实现封装性、安全性和灵活性。文中结合真实案例展示了如何通过不同投影满足多角色需求,并详细说明

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 248

C++总结笔记(十)——堆区内存开辟数组和二级指针

个人总结

baidu_35536188的博客 1862

【教程4>第4章>第20节】基于FPGA的costas环整体实现与仿真测试

Costas 环是一种用于载波同步的闭环反馈控制系统,主要应用于通信系统中的相干解调。其基本原理是通过鉴相器(Phase Detector,PD)比较接收信号与本地载波信号的相位差,将这个相位差信息经过环路滤波器(Loop Filter,LF)滤波后,去控制数控振荡器(Numerically Controlled Oscillator,NCO)的输出频率和相位,使得本地载波能够跟踪接收信号的载波,最终实现载波同步。Costas 环环路滤波器在载波同步过程中起着不可或缺的作用。

FPGA/MATLAB学习教程/源码/项目合作开发 1262

C++指向数组元素的指针 | 用指针输出数组中的10个数

C++指向数组元素的指针 在C++中,一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址;指针变量既然可以指向变量,也可以指向数组元素,所谓数组元素的指针就是数组元素的地址。 定义一个整型数组array,它有10个元素: int array[10]; 定义一个基类型为整型的指针变量p: int *p; 将元素array[0]的地址赋给指针变量p,使p指向array[0]: p=&array[0]; 和C语言一样,在C++中,数组名代表数组中第一个元素的

weixin_48669767的博客 8745

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【C++】二维数组的行指针和列指针

在C++中,数组与指针有密切的关系。任何通过数组和下标实现的表达式可等价地通过指针和偏移量实现。下面首先介绍一维数组与指针的关系,之后介绍二维数组的行指针和列指针。

zzy979481894的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【重学C++】【指针】详解让人迷茫的指针数组和数组指针

是否你也和我一样,到现在也分不清指针数组和数组指针?这篇文档带你重新认识它们,彻底认清它们。

同学小张的博客 2142

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++ 指针数组,数组指针,以及函数指针,以及堆中的分配规则

对象的堆内存分配,指针数组和数组指针有关内存的说明 !   一:关于指针和堆的内存分配 先来介绍一下指针 :指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,str

hgl868的专栏 2740

c++在堆区中创建数组的一些注意事项

Q1:我们为什么好端端的不在栈中创建数组,偏要跑到堆区中哪? R1:栈中的空间是有限的,在面对一些长度很大的数组的时候,会有力不从心的感觉,所以我们选择了在堆区中。 1.写法 1.1堆区创建一维数组的写法 类型名 * 指针名=new 类型名[数组长度] eg: int *p=new int[10] 这就表示我们在堆区中创建了个int类型的一维数组,长度是10,并且用int类型的指针指向他来便于我们后期维护。 注意:前后类型最好一致,或者可以转换。如果前面是string,后面是i...

admin的博客 5120

C/C++数组指针和指针数组

数组指针和指针数组的区别 指针数组:首先它是一个数组,每一个元素都是一个指针。 数组指针:首先它是一个指针,它指向一个数组。它是"指向数组的指针"的简称。 运算符的优先级关系:() &gt; [] &gt; *   数组指针(也称行指针)例如:int (*p)[n];根据优先级,先看( )内,p是一个指针,后面的[ ]又说明了p是一个指向数组的指针,由于前面的int,所以p是一个指向 i...

Tyler_Zx的博客 4203

C++对象指针数组与堆中对象数组

#include using namespace std; /*堆中对象数组、对象指针数组*/ class stu { public: void set(int x){i = x + 6;} int get(){return i*i;}; private: int i; }; void main() { const int n = 1000; stu * p = new stu[n];

九月飞雪的博客 4835

C/C++学习笔记-指针数组、数组指针

指针数组、数组指针 这两者前两个字可以看成是形容词,后两个词可以看成是名词: 名称 举例 是什么 特点 指针数组 int *p[10] 数组 由指针构成,指针指向整型 数组指针 int(*p)[10] 指针 指向整型数组 例1: #include "stdafx.h" #include <iostream> using namespace std; int n[...

sinat_18518099的博客 4314

C++学习笔记之数组&指针

如果你使用new、malloc或其他类似的函数为数据结构分配了动态内存,但之后没有释放它,那么这块内存将永远不会被回收。这不仅会导致程序使用的内存量逐渐增加,而且如果程序长时间运行或频繁进行动态内存分配,可能会导致可用内存耗尽,从而引发严重的问题。为了避免这些问题,通常建议程序员使用智能指针(如C++11引入的。

weixin_44392103的博客 1515

C++面试题-指针-指针数组与数组指针

C++面试题-指针-指针数组与数组指针 问:int (*p)[n]与int *p[n]的区别? 答: int (*p)[n]是数组指针,指向某n个元素所组成的整块的数组,返回值是整型指针类型的。 int *p[n]是指针数组,指向数组里面的每个元素,即p[0]指向第一个元素,p[1]指向第二个元素,以此类推,p[n-1]指向第n-1个元素,返回值是整型的。   问:下面代码的输出结果是什...

《好好先生》专栏 3754

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针、数组指针与指针数组、函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针、如何使用指针、如何定义指针、如何定义数组指针和函数指针,并给出对应的实例演示;接着,区别了数组指针与指针数组、函数指针与指针函数;最后,对最常混淆的引用传递、值传递和指针传递做了区处。 C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力。指针可

成长Bar的博客专栏 3218

C/C++数组指针

C/C++数组指针

Catherinemin的博客 3948

C++中new和delete在数组指针和指针数组中的调用

首先,先区分下数组指针和

指月的手指,成不了月亮,更得不到月亮!! 1万+
上一篇: C++学习笔记 数组对象
下一篇: C++学习笔记 数组字符串
EmbeddedLong
博客等级 码龄16年 79粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值