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

一、指针申明以及赋值

int *p;

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

我们可以这样看:

int *  p;

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

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

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

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

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

二、指针值的计算

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

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

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

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

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

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

最新文章

  1. [c++] Smart Pointers
  2. HTML语法大全
  3. oracle 11g如何完全卸载
  4. 一维Poisson方程计算
  5. 更快的方式实现PHP数组去重
  6. TYVJ P1037 阶乘统计2 Label:坑
  7. 函数参数为int*和int&的区别
  8. 关于sql where id in 转换成数据类型 int 时失败(转)
  9. asp.net自带的异步刷新控件使用
  10. hdu 1875
  11. MJExtension框架源码分析
  12. 201521123104《Java程序设计》第1周学习总结
  13. python装饰器练习题
  14. linux-echo
  15. js相关用法
  16. python中逻辑运算符“+”的特殊之处
  17. python 函数的定义及传参
  18. Android学习之Android studio TraceView和lint工具的使用具体解释
  19. Android ——VideoView禁止"无法播放该视频"弹窗
  20. sql server查询数据库的大小和各数据表的大小

热门文章

  1. mouseleave mouseout时候悬浮框不应该消失的时候消失了 css 解决办法
  2. CentOS 64位系统 yum安装32位软件包的方法
  3. spring cron表达式及解析过程
  4. git分支合并脚本
  5. Spring Boot 中yml配置文件
  6. How To Use Coordinates To Extract Sequences In Fasta File
  7. 【尺度不变性】An Analysis of Scale Invariance in Object Detection – SNIP 论文解读
  8. Springcloud/Springboot项目绑定域名,使用Nginx配置Https
  9. zoom:1;
  10. js 图片查看器