C++地址和指针的区别

地址和指针

地址

在C++中使用‘&’表示变量的地址,即 0x00bf528 这样的地址标识符,初始化后地址将不再发生变化。
‘&’还表示引用。 关于引用的用法这里没有详细列出。
举个栗子!

//创建变量a以后再输出变量a的地址,无论什么时候输出都将不会发生变化只是对地址存储的内容进行了修改。
int a = 5;
cout<< a << &a <<endl;
a = 6;
cout<< a << &a <<endl;

指针

指针使用‘*’表示,是用来存储地址信息的变量。同样正常情况下将一个声明赋值给一个指针变量,声明后的地址将不会发生变化。除非使用new来初始化变量。
使用new初始化后的变量要在使用完后使用delete进行内存释放
举个栗子!

int a = 0;
int i = 0;
while(a != 0){
	i = i + 1;
	int temp = a + i;
	// 每次循环只是改变了temp 的值并没有分配新的内存
	cout<< temp << &temp<<endl;
}

以上例子在实际使用过程中较好理解,也并不会产生什么错误和歧义,但是在一些类似链表的数据结构中容易出现一些逻辑上的错误。

/*
* 此处l1是 7-> 5 -> 9 这样的链表
*/
ListNode *ResHead =new ListNode();
        ListNode *lr =ResHead;
        int temp = 0;
//第一种写法
while(l1 != nullptr){
            int num = l1->val + temp;
            temp = num/10;
            num = num %10;
            // 这里在循环过程中ltemp 只是存储了第一次初始化的地址,在循环过程中在
            //不断反复覆盖掉过去地址中存储的ListNode的值
            ListNode *ltemp = &ListNode(num);
            lr->next = ltemp;
            l1 = l1->next;
            lr = lr->next;
        }
// 第二种写法
while(l1 != nullptr){
            int num = l1->val + temp;
            temp = num/10;
            num = num %10;
            //这里在循环过程中创建了新的地址来存储新的ListNode的值,因此循环后可以延长lr 而不是陷入循环。
            ListNode *ltemp = new ListNode(num);
            lr->next = ltemp;
            l1 = l1->next;
            lr = lr->next;
        }
//以上代码为力扣 两数相加 的部分代码,感兴趣可以自己搜索练习

以上栗子可以在vscode 中运行一下来感受地址和指针的区别,以及使用new和普通的&声明新的变量的区别。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值