成员malloc内存分配直观体现,以及C语言指针指向抽象理解

struct ListNode* newNode = (ListNode*)malloc(sizeof(struct ListNode));

这行代码是将newNode指针所指向的地址发生改变,就是指去别的地方去了,也就是这个指针变量的值发生了改变

类似于int a = 1;a = 2;

传进去函数的里边的这个变量的地址

这段函数说明了函数传参传的是副本,如果不直接将变量地址传进去的话

#include<iostream>
#include<windows.h>   	
#include<iomanip>
#include<cstdlib>
using namespace std;
void changeValue(int ptr) {
    cout<<&ptr;
}
int main()
{
    int a;
    cout<<&a<<endl;
    changeValue(a);
}

运行结果是

在这里插入图片描述

下面这个则是说明直接将地址传输进去

#include<iostream>
#include<windows.h>   	
#include<iomanip>
#include<cstdlib>
using namespace std;
void changeValue(int *ptr) {
    cout<<ptr;
}
int main()
{
    int a;
    cout<<&a<<endl;
    changeValue(&a);
}

这段代码输出ptr其实是输出的a变量的地址

结果是

在这里插入图片描述

C语言函数是按值传递的,就比如指针可以和地址值做等号(赋值)

void *insertNode(ListNode* head)
insertNode(head)

其实这里第二行就是将head的值也就是指针指向的地址传进去,这就称之为按值传递参数

*& 与& * 的区别

&*指的是取指针的地址 *&指的是指针指向地址

在这里插入图片描述
其实效果是等价的,右边的0x23加上那个框框其实就是指针的抽象表现(直接把那两个东西圈起来就是指针了)

星号以及引用的使用

#include <iostream>
#include <windows.h>
#include <iomanip>
#include <cstdlib>
using namespace std;
void changeValue(int *ptr)
{
    cout << ptr;
}
int main()
{
    int *a;
    int b = 6;
    a = &b;
    *a = b;
    int **c = &a;
    cout << "*a: " << *a
         << endl
         << "&a: " << &a 
         << endl
         << " a: " << a
         << endl
         << "&b: " << &b
         << endl
         << " c: " << c
         << endl
         << "*c: " << *c
         << endl
         <<"**c: " << **c;
}

运行结果是

在这里插入图片描述

结论

*是取该指针指向地址的值,也就是指针的值(一个地址)所对应的值
&是取该变量的地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值