1. 指针呢说白了就是指针变量中的值是一个地址,通过星号运算就可以访问这个地址上的值了;定义了一个变量,就为这个变量分配了一个内存空间,内存空间的首地址就是这个变量的地址值;并且,指针变量也有自己的内存空间。

  2. 对指针的一点理解_对指针的一点理解

    这就是为什么给函数传递两个变量的地址就可以交换两个变量的值,因为指针变量p中的值是传入变量 的地址,而不是简单的传值;p和&a是一样的,操作p就是操作变量a的地址,*p就是a的缘故;

Fun1(int x, int y)
{
int tmp = x;
x = y;
y = tmp;
}
Fun2(int *x, int *y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
int main(void)
{
int a = 1;
int b = 2;
Fun1(a, b);
Fun1(1, 2);
Fun2(&a, &b);
return 0;
}

Fun1函数执行过程分析:

分别给x和y分配内存空间,将实参传过来的值给x,y赋值,也就是:x = a;y = b

接下来执行交换语句,只是将x和y的值交换了,大家都知道,函数执行结束,x,y内存空间就会被收回,这样在主函数中a,b的值并没有交换。

对指针的一点理解_对指针的一点理解_02

Fun2函数执行过程分析:

    分别给指针变量x和指针变量y分配内存空间,将实参传过来的值给x,y赋值,

    也就是 x = &a;y = &b

    接下来执行交换语句,

     形参接收实参的值:

     x = &a;y = &b

对指针的一点理解_对指针的一点理解_03

*x就是取以x的值为地址的空间上的值,同样,*y取以y的值为地址的空间上的值。

接下来执行交换语句。

同样,函数执行完了之后,系统会自动回收指针变量x和y的内存空间,然而这次却将

a,b的值交换了,原因是x、y的值是&a和&b,*x和*y交换,也就是a内存空间上的值与b内存空间上的值的交换,从而将a和b的值进行了交换。

2.在C++中有引用的感念,这是一个新的机制,给变量起了一个别名,这样操作简单了许多。

3.关于链表中出现的指针问题,最长遇到的就是内存泄漏,访问非法内存的问题,我最大的收获就   是:

  1.     例如:定义链表指针Node* p;假设Node数据类型以定义好;

  2.     Node* tmp = NULL;

  3.     tmp = p->next;

  4.     关键要知道,p->next 和 tmp的区别,虽然他们两个的首地址是一样的,而p->next是相对与p来说的,  也就是p->next中的值是tmp的值,free(tmp);tmp = NULL后 p->next中的值就是一个非法的地址值,访问p->next时,造成程序奔溃。