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;
}
运行结果是
结论
*是取该指针指向地址的值,也就是指针的值(一个地址)所对应的值
&是取该变量的地址