C/C++ 传地址究竟传的是什么

// Type your code here, or load an example.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void testPointer(int *add)
{
    cout<<"========1=========="<<endl;
    cout<<"the value the pointer points:"<<*add<<endl;
    cout<<"it's value: "<<hex<<add<<endl;
    cout<<"it's addr:"<<hex<<&add<<endl;
    add = nullptr;
    cout<<"=========2========="<<endl;
    cout<<"it's value: "<<hex<<add<<endl;
    cout<<"it's addr:"<<hex<<&add<<endl;
}

int main ()
{
    int a = 8;
    int *b = &a;
    cout<<"it's value: "<<hex<<b<<endl;
    cout<<"it's addr:"<<hex<<&b<<endl;
    testPointer(b);
    cout<<"=========3========="<<endl;
    cout<<"it's value: "<<hex<<b<<endl;
    cout<<"it's addr:"<<hex<<&b<<endl;
    return 0;
}

运行结果:

it's value: 0x7ffd06f86c2c
it's addr:0x7ffd06f86c20
========1==========
the value the pointer points:8
it's value: 0x7ffd06f86c2c
it's addr:0x7ffd06f86c08
=========2=========
it's value: 0
it's addr:0x7ffd06f86c08
=========3=========
it's value: 0x7ffd06f86c2c
it's addr:0x7ffd06f86c20

地址本身也是值;传地址其实是传值的一种。

有一个小人儿A,它的手指向了一个圆圈圈起来的地,地里有8个萝卜;

通过函数testPointer传递时发生了什么怎么理解?
会再出来一个小人儿B,它的手也指向了这个圆圈所在的地。

如果,在这个testPointer函数里将add赋值为nullptr怎么理解?
相当于让小人儿B把手给放下,谁也别指了。
那此时对小人儿A有影响吗?没有。

如果,在这个testPointer函数里,通过将*add赋值为9,此时怎么理解?
相当于让小人儿B去那块地里,把地里的萝卜变成9个;
那么小人儿A指的这个地有几个萝卜?9个,因为被B改变了。A和B都依然指向这块地。

如果,在这个testPointer函数里,free(add)会发生什么?
相当于让小人儿B去把那块原型的地挖了,萝卜可能还在那块地,可能被翻的稀烂,也可能被别人种辣椒了。
而此时小人儿A呢?它还指向那块地,只是那块地被挖了,已经是一块野地了,此时不管是小人儿A再去访问那块地、还是去挖那块地,都属于非法行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值