C语言指针详解----指针声明定义赋值

C语言的指针是让新手很头疼的事情,但是由于其太过于灵活,以至于可以很好得的解决一些复杂的问题,因此不得不掌握。我最近正在学习指针相关的内容,因此在这里做一个小的总结。本篇是不涉及到函数以及结构体等复杂的使用方法,仅仅讨论一下指针的基本使用方法。

首先我们区分 *  和  &  ,这两个运算符,  & 我们在scanf函数中经常使用。为了方便理解我们看下面这行代码:

int *p =a;
定义了一个指向a的整型指针,那么有 p=&a ;                  *p =a;

即指针变量的值是地址(&a),*可以理解为取地址 (*p 可以看成 *(&a)取出&a这个地址中的值)。

下面我们看一个复杂点的代码:

int n =0,*p = &n,**q = &p;

这里出现了二级指针,也就是所谓的“指向指针的指针”。 q是指向 int* 型数据的指针变量,首先  p  = &n,这行代码很好理解,后面的**q = &p可以拆开来看,首先声明了一个 int* 型数据的指针变量  int **q;再给指针型变量赋值 即(*q) = &p;那么问题来了,对于指针的赋值应该如何理解呢?就以上面这行定义为例有下面四个赋值语句

p = 1; *q = 2;q = p;*p = 5;

我们先看 p = 1;这个赋值语句,根据我们上面所解释的p =&a;我们知道指针变量的值应该是地址,而p = 1;直接将整数赋给了指针变量,编译时会报错

cannot convert from 'const int' to 'int *'

我们再看 *q = 2;根据上面的分析我们知道(*q) = &p;同第一句一样的问题编译时会报错 cannot convert from 'const int' to 'int *'

再来看第三句 q = p; 这句很明显的错了,p是 int* 型数据 而 q是int**型数据,编译时会报错cannot convert from 'int ** ' to 'int *'

我们根据上述 p=&a ;                  *p =a;可以明显的看到  *p = 5;这是一个正确的赋值语句。


猜你喜欢

转载自blog.csdn.net/csshuke/article/details/80937392