首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在堆上创建的变量,指向同一变量的2个指针有不同的地址?

在堆上创建的变量是通过动态内存分配函数(如malloc、new等)在堆内存中分配的变量。堆是一块较大的内存区域,用于存储动态分配的数据。

当在堆上创建变量时,会返回一个指向该变量的指针。如果有两个指针指向同一个堆上的变量,那么这两个指针的地址是不同的。

这是因为指针本身也是一个变量,它在栈上分配内存。栈是一种用于存储局部变量和函数调用信息的内存区域。每个指针变量在栈上都有自己的地址。

当我们使用动态内存分配函数在堆上创建变量时,函数会返回一个指向堆上变量的指针。这个指针变量本身是在栈上分配的,它存储了堆上变量的地址。如果有多个指针指向同一个堆上的变量,那么每个指针变量在栈上都有自己的地址,因此这些指针的地址是不同的。

这种情况下,指针变量的值(即指向堆上变量的地址)是相同的,但指针变量本身的地址是不同的。

总结起来,堆上创建的变量通过指针来引用,不同指针的地址是不同的,但它们的值(指向堆上变量的地址)是相同的。

关于堆、栈和指针的更详细信息,可以参考腾讯云的相关文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C语言 | 指向结构体变量指针变量

例40:C语言实现通过指向结构体变量指针变量变量输出结构体变量信息。...解题思路:主函数中声明了struct student类型,然后定义了一个struct student类型变量s_1,又定义了一个指针变量p,它指向一个struct student类型对象,将结构体变量...s_1起始地址赋给指针变量p,也就是使p指向s_1,然后对s_1各个成员赋值。...    struct student *p;//定义结构体指针变量    p=&s_1;//将s_1得地址赋给指针变量    s_1.num=10010;//赋值    strcpy(s_1.name,...思考两个问题,怎么对结构体变量成员赋值?怎么通过指向结构体变量指针访问结构体变量中成员? C语言 | 通过指向结构体变量指针变量输出结构体变量信息 更多案例可以go公众号:C语言入门到精通

1.8K2218

C++指向结构体变量指针

C++通过指向结构体变量指针引用结构体变量成员 C++中,一个结构体变量指针就是该变量所占据内存段起始地址指针变量也可以用来指向结构体数组中元素。 ...C++提供了指向结构体变量运算符->,例如: p->num;//表示指针p当前指向结构体变量成员num p->num 和(*  p).num 等价,同样,p->namep->name等价于(*p...C++中,以下3种形式等价:  结构体变量.成员名,如stu.num。 (*p).成员名,如( *p).num。 p->成员名,如p->num,->称为指向运算符。 ...++p->n;//得到p指向结构体变量成员n值,并使之加1,然后再使用它。 经典案例:C++指向结构体变量指针。...C++指向结构体变量指针 更多案例可以go公众号:C语言入门到精通

2.8K118
  • C++指向结构体变量指针构成链表

    C++结构体变量指向结构体变量指针构成链表  链表一个头指针变量,以head表示,它存放一个地址,该地址指向一个元素。...链表中每一个元素称为结点,每个结点都应包括两个部分:   用户需要用实际数据 下一个结点地址。 经典案例:C++使用结构体变量。...19;//赋值       stu3.num=1003;//赋值    stu3.sex='M';//赋值    stu3.age=20;//赋值       head=&stu1;//将结点stu1起始地址赋给头指针...    stu3.next=NULL;//结点next成员不存放其他结点地址    point=head;//point指针指向stu1结点       do   {     cout<<point-...C++指向结构体变量指针构成链表 更多案例可以go公众号:C语言入门到精通

    1.3K88

    【重拾C语言】七、指针(一)指针变量指针操作、指向指针指针

    例如,int*是指向整数(int)类型指针指针变量是一个存储了内存地址变量,可以使用指针变量来存储、操作和访问内存中数据。...指针变量用来存储内存地址,可以指向其他变量或数据结构。例如,int *ptr;声明了一个指向整数指针变量。 间接引用运算符也称为解引用运算符,用于访问指针指向变量或数据。...C语言中,间接引用运算符使用*符号。通过将间接引用运算符应用于指针变量,可以获取该指针指向实际值。例如,如果ptr是一个指向整数指针变量,那么*ptr将给出该指针指向整数值。...C语言中,指针操作包括指针算术运算、指针比较和指针递增/递减等。 7.2.1 指针算术运算 指针加法运算:可以将指针与一个整数相加,结果是指针指向内存地址增加了若干个字节。...指向指针指针存储了一个指向指针变量地址,通过多级指针可以访问多级间接引用内存。

    24310

    8.7 动态内存分配与指向指针变量

    01 什么是内存动态分配 1、全局变量是分配在内存中静态存储区,非静态局部变量(包括形参)是分配在内存中动态存储区,这个存储区是一个“栈”区域。...2、C语言允许建立内存动态分配区域,以存放一些临时用数据,这些数据不必程序声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。...形参size类型定为无符号整型。此函数是一个指针型函数,返回指针指向该分配域开头位置。...3、free函数 函数原型:void free(void *p); 其作用是释放指针变量p所指向动态空间,使这部分空间能重新被其他变量使用。...03 void指针类型 1、指向void类型应该理解为指向空类型或者不指向确定类型数据。 2、把void指针赋值给不同基类型指针变量时,编译系统会自动进行转换,不必用户自己进行强制转换。

    1.1K3229

    7.7 动态内存分配与指向指针变量

    一、什么是内存动态分配 全局变量是分配在内存中静态存储区,非静态局部变量是分配在内存中动态存储区,这个存储区称为“栈”。...C语言中允许建立内存动态分配区域,以存放一些临时用数据,这些数据不必程序声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。...n个长度为size连续空间,这个空间一般比较大 (3)free函数 函数原型 void free(void *p); 作用:释放指针变量p所指向动态空间,使这部分空间能重新被其他变量使用 (4)realloc...函数 函数原型 void *realloc(void *p,unsigned int size); 作用:重新分配动态空间大小 三、void指针类型 C99允许使用基类型为void指针类型 注意:不要把指向...void类型理解为指向任何类型,而应理解为指向空类型或不确定向类型

    6853329

    c语言之指向二维数组元素指针变量

    如何使用指针对二维数组进行遍历?...] = {4,5,6},我们知道,一维数组在内存中是连续一块内存,并且数组名a0,a1代表就是该数组首元素地址,而正因为二维数组内存中地址也是连续,所以a1首元素地址就为a0数组首元素地址...+a0中元素个数,因此,我们就可以通过让指针不断+1来访问其中每一个元素,不用再考虑行与列限制。...(2)传入printArr中是二维数组首元素地址,也就是第一个一维数组首元素地址,也就是其名字。...(3)遍历时让指针p一直向后移动到二维数组末尾,可以看做将二维数组展开成一维数组,再计算移动次数。 (4)当访问到位置是列整数倍时,进行换行,方便显示。

    1.3K20

    8.7 C语言动态内存分配与指向指针变量

    01什么是内存动态分配 1、全局变量是分配在内存中静态存储区,非静态局部变量(包括形参)是分配在内存中动态存储区,这个存储区是一个“栈”区域。...2、C语言允许建立内存动态分配区域,以存放一些临时用数据,这些数据不必程序声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。...形参size类型定为无符号整型。此函数是一个指针型函数,返回指针指向该分配域开头位置。...3、free函数 函数原型:void free(void *p); 其作用是释放指针变量p所指向动态空间,使这部分空间能重新被其他变量使用。...03void指针类型 1、指向void类型应该理解为指向空类型或者不指向确定类型数据。 2、把void指针赋值给不同基类型指针变量时,编译系统会自动进行转换,不必用户自己进行强制转换。

    1.2K2725

    【C 语言】字符串拷贝 ( 函数形参使用推荐方法 | 凡是涉及 修改指针指向 操作一律创建 指针变量 执行 | 引入 辅助 局部 指针变量 )

    文章目录 一、函数形参使用推荐方法 二、完整代码示例 一、函数形参使用推荐方法 ---- 函数中 , 形参 中 指针变量 , 不建议直接使用 ; 推荐 函数中 , 定义 局部 指针变量 , 接收...形参中 指针变量 , 具体操作是 函数中 定义 局部指针变量 ; 直接使用 *to_tmp++ 样式代码 , 会改变指针指向 , 可能会导致错误 , 一旦出错 , 根本无法排查 ; 如果 将...数组首地址 常量指针 指针指向 进行修改 , 直接就报错了 ; 函数形参 值 , 不要轻易进行改变 , 因此一般函数形参 , 都定义为 const char * 指针常量 类型 ; 引入...辅助 局部变量 , 接收 函数 形参变量 ; 凡是涉及 修改指针指向 操作一律创建 指针变量 执行 ; 代码示例 : /* * 实现字符串拷贝 ( 实现了模块化 ) * 将 from...{ // 这两个指针任何一个为空 , 都直接退出 return; } // 从 from 指针指向字符 拷贝到 // to 指针指向字符

    97610

    【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 值 | 函数中 间接修改 指针变量 值 | 函数中 间接修改 外部变量 原理 )

    文章目录 一、直接修改 和 间接修改 指针变量 值 二、函数中 间接修改 指针变量 值 三、函数中 间接修改 外部变量 原理 一、直接修改 和 间接修改 指针变量 值 ---- 直接修改 指针变量...return 0; } 执行结果 : 二、函数中 间接修改 指针变量 值 ---- 函数 中 间接修改 指针变量 值 , 将 指向一级指针 二级指针 变量 , 传递到 函数形参 中 ,... 函数中 , 使用 * 符号 , 修改 二级指针 指向 一级指针 变量值 ; 注意 : 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量...三、函数中 间接修改 外部变量 原理 ---- 如果要 修改 一级指针 值 , 必须 传入 指向 一级指针 二级指针 变量 才可以 , 传入一级指针变量 , 不能修改一级指针变量值 ; 这是因为...如果传入 一级指针 变量 , 这个传入 一级指针 变量 , 其 生命周期 到函数结尾就结束了 , 跟函 数外部 一级指针 变量 没有任何关系 ; 如果 要修改 函数外部 变量 , 必须传入 指向变量

    21.1K11

    初识指针指针指针变量、如何理解地址指针类型意义、void*指针、野指针、空指针)(笔记)

    指针指向内存区: 函数调用时就会创建一个栈桢,栈桢中内存被划分为一个一个单元, 其中每个内存单元能存放8个比特位(一个字节),每个单元也有一个编号。...*:解引用操作符 &:取地址操作符 内存单元编号 = 地址 = 指针 int main() { int a = 10;//创建一个变量a,并赋值为10 //在内存上申请4个字节空间,存放10...四、指针类型意义(为什么不用ptr_t p代表所有指针) 1.指针解引用时候多大权限 (如果一个指针代替所有的话,解引用时字节与变量定义类型不同) 2.指针类型决定了指针向前或向后走一步多大...七、空指针指针是一个特殊数据类型,它值定义为NULL。空指针不同于NULL整数表示,它是一个指针变量特殊值,表示该指针变量指向任何有效内存地址。...使用空指针进行解引用操作会导致程序崩溃,因为没有任何有效内存地址可供访问。C语言中,空指针主要用于表示指针变量没有指向任何有效内存地址,例如未初始化指针变量或已释放内存块。

    14810

    变量分析不同物种研究中使用频率

    前几天看到一篇综述解读,来源于水生态健康: 微生物生态学中变量分析 里面一个表感觉比较有意思:统计了100多年应用各种统计方法文章比例。...我搜索条件(数据库,文章类型)比原文还严格,但是得到文章数远远高于他结果。...但是PCA数量/比例最多这一规律是一致。而其他方法使用比例都很低。我也做了一下CA分析,结果如图。 原文中不同方法能分得比较开,细菌和微生物关键词会聚到一起。...而我结果中不同物种类型分得很开,分析方法则比较集中,离细菌比较近。其中DCA,PCA,CCA,Mantel区分不开。看来不同物种分析方法差距还是比较大。...点分享 点点赞 点在看 一个环境工程专业却做生信分析深井冰博士,深受拖延症困扰。想给自己一点压力,争取能够不定期分享学到生信小技能,亦或看文献过程中一些笔记与小收获,记录生活中杂七杂八。

    3.1K21

    【C 语言】指针数据类型 ( 指针类型变量指针指向内存块 概念区别 | 指针赋值 | 指针运算 | 内存赋值 | 内存取值 | 内存修改注意事项 )

    文章目录 一、指针类型变量指针指向内存块 概念区别 1、指针赋值 2、指针运算 3、内存赋值 4、内存取值 5、内存修改注意事项 一、指针类型变量指针指向内存块 概念区别 ---- 指针类型变量...与 指针指向内存块 概念区别 : 给定一个指针类型变量 : // 定义一个普通整型变量 int a = 888; // 声明 指针类型变量 // 将整型变量地址赋值给指针类型变量 int *p =...&a; 1、指针赋值 给指针赋值 : 给上述指针变量 p 赋值操作 , 如 p = 0x7F451D12 , 只改变指针变量 p 值 , 没有改变指针变量 p 原来指向 内存块 中存储值 ; char..., p + 1 与 p++ 计算结果是指针地址值加上指针类型对应字节大小值 , 如果是 int 类型指针 , 则增加 4 字节 ; 3、内存赋值 ** 给指针指向内存赋值 * 给上述指针变量...p 指向内存 进行赋值操作 , 如 *p = 0x7F451D12 , 不会改变指针变量 p 值 , 只会改变指针变量 p 原来指向 内存块 中存储值 ; 4、内存取值 指针指向内存赋值与取值

    3K20

    .NET面试题解析(01)-值类型与引用类型

    变量b栈上存储,其值指向字符串“123”托管堆对象地址(字符串是引用类型,字符串对象是存储托管堆上面。字符串是一个特殊引用类型,后面文章会专门探讨)” ? 值类型一直都存储栈上面吗?...5.还有一种情况,同上面题目12,结构体(值类型)中定义引用类型字段,结构体是存储栈上,其引用变量字段只存储内存地址指向堆中引用实例。  ...将引用类型变量赋值给另一个引用类型变量,它复制值是引用对象内存地址,因此赋值后就会多个变量指向同一个引用对象实例。...这与引用类型变量赋值不同,引用类型变量赋值只复制对象引用(即内存地址,类似C++中指针),而不复制对象本身。...按值传递:对于值类型传递值拷贝副本,而引用类型传递是引用变量内存地址,他们还是指向同一个对象。 按引用传递:通过关键字out和ref传递参数内存地址,值类型和引用类型效果是相同

    80020

    面试官“逗”你系列:不借助第三变量交换两个变量方案你几种?

    引言 我们学习编程之初,就学习过变量赋值操作,同时也学习了将一个变量值赋值给另外一个变量。对于交换两个变量值,很多童鞋都有解决方案。...二、不借助第三变量实现-ES6版 面试官听到上面给出解决方案后,微微一笑(脑海中闪现到:你以为就这么简单)说道,其他解决方案吗,不借助第三变量呢?...变量运算中这个操作符什么作用呢? 异或运算符: 是执行位运算,二进制运算,参与变量运算两个变量要转为二进制进行运算。 如果相同二进制位值相同,则转为0,否则转为1....以上四种实现交换两个变量值得方案你都掌握了吗,如果掌握了,可以对面试官反手就是一个“吊打”了。如果你更多解决交换两个变量方案,欢迎留言交流呀!...后记 以上就是胡哥今天给大家分享内容,喜欢小伙伴记得收藏、转发、点击右下角按钮在看,推荐给更多小伙伴呦,欢迎多多留言交流... 胡哥话说,一个技术,有情怀胡哥!现任京东前端攻城狮一枚。

    42930

    iOS block与__block、weak、__weak、__strong

    对于指针(对象)数据类型,修改变量值,是修改指针变量指向对象内存空间地址,不会改变指针变量本身地址 简单来说,基础数据类型,只需要考虑值地址,而指针类型,则需要考虑指针变量地址指针变量指向对象地址...B,不能修改a指向对象地址 block外部,a指针变量地址为A,指向对象地址为B,可以修改a指向对象地址, block外部修改后, 外部a指针变量地址依旧是A,指向对象地址变为D 内部...a指针变量地址依旧是C,指向对象地址依旧是B 2.1__block修饰 a=[NSObject new],a指针变量地址为A,指向对象地址为B block内部,a指针变量地址为C,指向对象地址为...另外需要注意是,如果对一个已存在对象(变量a),进行__block声明另一个变量b去指向它, a指针变量地址为A,b指针变量会是B,而不是A, 原因很简单,不管有没__block修饰,不同变量指向即使指向同一个对象...,他们指针变量地址都是不同

    2K62

    C++面试题

    ;比如,类中包含指针成员变量未定义拷贝构造函数或未重载赋值运算符情况下,编译器会调用默认拷贝构造函数或赋值运算符,以逐个成员拷贝方式来复制指针成员变量,使得两个对象包含指向同一内存空间指针,...那么释放第一个对象时,析构函数释放该指针指向内存空间,释放第二个对象时,析构函数就会释放同一内存空间,这样行为是错误; 没有将基类析构函数定义为虚函数。...栈上分配:执行函数时,局部变量内存都可以栈上分配,函数结束时会自动释放;栈内存分配运算内置于处理器指令集中,效率很高,但分配内存容量有限; 从堆上分配:由new分配/delete释放内存块...分配和管理方式不同: 堆是动态分配,其空间分配和释放都由程序员控制; 栈是由编译器自动管理,其分配方式两种:静态分配由编译器完成,比如局部变量分配;动态分配由alloca()函数进行分配,但是会由编译器释放...9、浅拷贝和深拷贝什么区别? 浅拷贝只复制指向某个对象指针,而不复制对象本身,新旧对象还是共享一块内存;而深拷贝会创造一个相同对象,新对象与原对象不共享内存,修改新对象不会影响原对象。

    1K30
    领券