千家信息网

C++中指针和内存分配的方法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"C++中指针和内存分配的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C++中指针和内存分配的方法"文章能帮助大家解决问题。指针指针是保
千家信息网最后更新 2026年11月04日C++中指针和内存分配的方法

这篇文章主要介绍"C++中指针和内存分配的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"C++中指针和内存分配的方法"文章能帮助大家解决问题。

指针

指针是保存内存位置地址的变量。我们知道声明的所有变量在内存中都有一个特定的地址。声明一个指针变量来指向内存中的这些地址。

声明指针变量的一般语法是:

int p, *ptr; //声明变量p和指针变量ptrp = 4; //赋值4给变量pptr = &p; //将p的地址分配给指针变量ptr

在内存中,这些声明将表示如下:

这是指针在内存中的内部表示。当地址变量分配给指针变量时,它指向的变量如上图所示。

由于 ptr具有变量 p 的地址,*ptr 将给出变量 p 的值(指针变量 ptr 指向的变量)。

为什么需要 C++ 中的指针?为了解释对指针的需要,有必要回到基本内存布局。

每当执行程序时,程序指令都会驻留在代码段中。并且所有的方法和数据都将驻留在堆栈中。代码部分只能访问堆栈部分,但不能直接访问堆部分。

注意:由于代码段不能直接访问堆段,所以不能直接使用堆内存,会被浪费掉,造成栈内存溢出。

使用指针可以解决这个问题。指针为代码部分提供了对堆内存的间接访问

在堆栈部分创建一个指针,该指针指向堆部分的内存地址,从而间接访问堆部分。

C++ 中使用指针的动态内存分配:

在堆部分分配内存发生在运行时,而不是在编译时,因此分配堆内存称为动态内存分配。

一般来说,C++不会在堆中分配一个内存,因为在使用指针时通常会遇到的复杂性。所以只分配一个内存块,我们就要使用堆内存,比如对于数组,我们会进行动态内存分配。

在 C++ 中,new运算符用于在运行时分配内存,内存以字节为单位分配。该新操作符表示用于在堆动态存储器分配的请求。如果有足够的内存可用,则new运算符初始化内存并将新分配和初始化的内存的地址返回给指针变量。

语法:

datatype *pointer_name = new datatype

具体例子

int *ptr = new int;//在动态分配时,我们可以通过以下两种方式声明一个变量。int *ptr = new int (10);int *ptr = new int {15};// new运算符还用于分配数据类型的内存块(数组)。int *ptr = new int[20];// 上面的语句为int类型的20个整数连续动态分配内存,并返回指向序列的第一个元素指向"ptr"指针。

一旦使用new关键字将堆内存分配给变量或类对象,我们就可以使用delete关键字释放该内存空间。

动态内存分配概念的主要用途是通过指定其大小来声明数组,但不确定它时将内存分配给数组。

看一个例子来理解数组的内存分配用法。

#include using namespace std;int main(){    int len, sum = 0;    cout << "Enter the no. of students in the class" << endl;    cin >> len;    int *marks = new int[len]; //Dynamic memory allocation    cout << "Enter the marks of each student" << endl;    for (int i = 0; i < len; i++)    {        cin >> *(marks + i);    }    for (int i = 0; i < len; i++)    {        sum += *(marks + i);    }    cout << "sum is " << sum << endl;    return 0;}

在代码中,首先询问用户一个班级的学生人数,并将其值存储在 len 变量中。

然后声明一个整数数组,并使用此语句在内存中动态分配等于 len 变量中存储的值的空间 int *marks = new int[length];

因此它被分配了一个等于"长度*(1个整数的大小)"的空间。

关于"C++中指针和内存分配的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

内存 分配 指针 变量 动态 地址 部分 C++ 指向 数组 方法 代码 堆栈 整数 知识 空间 运算符 存储 运算 例子 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 云信互联网科技有限公司 广州百单互联网科技有限公司 深圳恒合互联网络科技有限公司 互联网科技的发展 万易互联网科技有限公司 智慧科技互联网 多迪互联网科技有限公司 卫星互联网科技股票 江苏南京365互联网科技 须眉科技是互联网公司吗 中国互联网有什么科技含量 苏州铭阳互联网科技有限公司 搜狐科技互联网 华中科技大学互联网的牛人 广州燕处互联网科技有限公司 上海同邻互联网科技有限公司规模 艺电能源互联网科技有限公司招聘 西安左小互联网科技有限公司 互联网高科技绘画 伟宏互联网科技 广州万易互联网科技有限公司 丰台科技园 互联网 汇久创客互联网科技 互联网科技平台产品运营 唯美互联网科技 西安左小互联网科技有限公司 科技互联网经济论坛 平安好医生打造互联网科技医疗 中国主要互联网科技公司
0