码迷,mamicode.com
首页 > 编程语言 > 详细

C语言学习之指针

时间:2019-03-15 00:51:41      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:才有   基本   声明   ret   指针   style   理解   数值   两种   

指针这块,看了好久才有点头绪,稍微有点理解了。

一、指针申明以及赋值

int *p;

这样就声明了一个int型的指针p,这个p就是指针变量,可能上述的书写方式会混淆我们队指针的理解(*号)

我们可以这样看:

int *  p;

int型指针变量---------------------->p;这个*和p分开的话,也是可以解析的。

然后重点来了,这个指针变量赋值的时候只能接受内存地址,对,是内存地址,并且只能是变量计算后的地址(&符计算的内存地址)

   int  var = 20;    /* 实际变量的声明 */
   int  * ip;            /* 指针变量的声明 */
 
   ip = &var;        /* 在指针变量中存储 变量var 的地址 */
   ip = &2;           /*基本数据类型求地址会报错*/

也就是说指针变量只能存储(接受)栈内存的地址。

对于内存,你只需要知道计算机的内存被编组为“地址-”这样的关系对。

二、指针值的计算

上面我们知道对于int * ip来说,这个ip是一个只能存内存地址的指针变量,既然地址对应着值,那么这个值怎么求呢?

还是用 * 号,但是此*号不同于变量声明时候的*号,这个*号是取值符, 取出指针所指向地址的值。

   int  var = 20;   /* 实际变量的声明 */
   int  * ip;       /* 指针变量的声明 */
 
   ip = &var;       /* 在指针变量中存储 变量var 的地址 */
 
   /* 使用取值符*求得指针变量(地址)对应的值 */
   printf("Value of *ip variable: %d\n", *ip );
 
   return 0;

对于&,就像之前说的那样,放在变量前面:,是取址符, 任何变量都是放在内存中的, 取址符&就是获得变量在内存中地址。

所以,下面两种写法都是错的:

p = var;        // Error: 指针变量只能存储地址, 给指针赋值其他类型的数据显然不对
*p = &var    //左边*p取值之后是个int型数值,而右边是求址符,是一个内存地址,显然不是一个东西

 

C语言学习之指针

标签:才有   基本   声明   ret   指针   style   理解   数值   两种   

原文地址:https://www.cnblogs.com/eco-just/p/10534428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!