通过一个例子引出对指针的概念理解

1,例子

  1. #include<stdio.h>
  2. int main(void)
  3. {
  4. int xiaozhang = ; //小张的身高
  5. int xiaoli = ; //小李的身高
  6. int xiaowang = ; //小王的身高
  7.  
  8. int *xiaolin,*xiaohong;
  9.  
  10. xiaolin = &xiaozhang; //小玲指向小张
  11. xiaohong = &xiaowang; //小红指向小王
  12.  
  13. printf("小玲喜欢的人的身高:%d\n",*xiaolin);
  14. printf("小红喜欢的人的身高:%d\n",*xiaohong);
  15.  
  16. xiaohong = &xiaoli; //小红指向小李(移情别恋)
  17.  
  18. *xiaohong = ; //将小红指向的对象赋为180 == 修改小红喜欢的人的身高
  19.  
  20. printf("\n");
  21. printf("小张的身高:%d\n",xiaozhang);
  22. printf("小李的身高:%d\n",xiaoli);
  23. printf("小王的身高:%d\n",xiaowang);
  24. printf("小玲喜欢的人的身高:%d\n",*xiaolin);
  25. printf("小红喜欢的人的身高:%d",*xiaohong);
  26.  
  27. return ;
  28. }

2,理解

当指针p的值为对象x的地址时,我们一般会说“p指向x”。

通过以上例子,我们在这里可以将“指向”理解成“喜欢”,因此,指针p的值为对象x的地址我们可以理解成“p喜欢x”

接着进行“xiaohong = &xiaoli”的复制,我们就可以得出“小红喜欢小李”。

xiaolin、xiaohong的数据类型是“指向int型变量的指针型”

  1. xiaolin = &xiaozhang;
  2. xiaohong = &xiaowang;

从以上赋值语句也可以发现,&xiaozhang、&xiaowang的类型也是“指向int型变量的指针型”。

所以说取地址符(&)不光可以理解为取址运算符,也可以理解为生成指针,表达式&xiaozhang是指向xiaozhang的指针,其值为xiaozhang的地址

指针运算符

在进行显示的地方,就要用到叫作指针运算符的单目运算符*。

将指针运算符*写于指针之前,就可以显示该指针指向的对象内容。

因此,*xiaolin就等于“xiaolin指向的对象”,*xiaolin就是xiaozhang。*xiaolin是xiaozhang的别名

所以当p指向x时,*p就是x的别名

指针运算符的赋值

当指向 xiaoli 的指针赋给xiaohong,使 xiaohong 指向 xiaoli,这样一来就变成“xiaohong 喜欢 xiaoli”

小红从小王移情别恋给小李了,啧啧...

所以,如果将指向其他对象的指针赋给指针变量,那么该指针变量就会指向这些对象。

因此,上例的程序运行结果如下

  1. xiaolin = &xiaozhang;
  2. xiaohong = &xiaowang;
  3.  
  4. printf("小玲喜欢的人的身高:%d\n",*xiaolin);
  5. printf("小红喜欢的人的身高:%d\n",*xiaohong);
  6.  
  7. xiaohong = &xiaoli; //int 175
  8.  
  9. *xiaohong = ; //修改小李的身高,从175变为180
  10.  
  11. printf("\n");
  12. printf("小张的身高:%d\n",xiaozhang);
  13. printf("小李的身高:%d\n",xiaoli);
  14. printf("小王的身高:%d\n",xiaowang);
  15. printf("小玲喜欢的人的身高:%d\n",*xiaolin);
  16. printf("小红喜欢的人的身高:%d",*xiaohong); //输出180

对C语言中指针的入门理解的更多相关文章

  1. 这样子来理解C语言中指针的指针

    友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指 ...

  2. C语言中指针和数组

    C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之 ...

  3. C语言中指针占据内存空间问题

    以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...

  4. 理解C语言中指针的声明以及复杂声明的语法

    昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文 ...

  5. C语言一维指针的深入理解

    指针是C语言中广泛使用的一种数据类型.运用指针编程是C语言最主要的风格之一. 利用指针变量可以表示各种数据结构:能很方便地使用数组和字符串:并能象汇编语言一样处理内存地址,从而编出精练而高效的程序.指 ...

  6. C语言中指针*p[N], (*P)[N],及**p的区别

    在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: ...

  7. C语言中指针和多维数组

    指针和多维数组 数组名是特殊的指针 数组是一个特殊的指针,多维数组也是更为复杂的数组,它们的关系是什么样的呢? 我们通过一个简单的例子来比较形象的了解指针和多维数组: int a[2][3]; 这是一 ...

  8. 编程基础-c语言中指针、sizeof用法总结

    1.指针 学习 C 语言的指针既简单又有趣.通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的.所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的. ...

  9. c语言中指针和多维数组的理解

    1.复习指针和数组之间的特殊关系:不带方括号的数组名是一个指针,指向该数组的第一个元素. 2.多维数组: ][];//声明一个二维数组作为举例 a.理解方式1:可以将数组看成行和列构成,即理解成2行4 ...

随机推荐

  1. 最全Java锁详解:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁

    在Java并发场景中,会涉及到各种各样的锁如公平锁,乐观锁,悲观锁等等,这篇文章介绍各种锁的分类: 公平锁/非公平锁 可重入锁 独享锁/共享锁 乐观锁/悲观锁 分段锁 自旋锁 01.乐观锁 vs 悲观 ...

  2. c#多线程 Invoke方法的使用

    在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界 ...

  3. C++11 delete和default

    Defaulted 函数 C++ 的类有四个特殊成员函数,它们分别是:默认构造函数.析构函数.拷贝构造函数以及拷贝赋值运算符.这些类的特殊成员函数负责创建.初始化.销毁,或者拷贝类的对象. 如果程序员 ...

  4. sql2005分页储存过程和C#分页类

    1.sql2005分页储存过程 --sql2005,qq524365501 create Procedure up_page2005 ), -- 表名称 ), -- 列 ), -- 主键,用于统计总数 ...

  5. 使用canvas绘制饼状图

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Docker 入门(Mac环境)- part 4 swarms

    part-4 Swarms 简介 这一节主要是介绍一下如何在集群模式下部署docker应用:集群的概念很好理解了,多台机器共同完成一项任务:和Hadoop那些集群一样,docker也相当于有一个管理机 ...

  7. spring boot guava cache 缓存学习

    http://blog.csdn.net/hy245120020/article/details/78065676 ****************************************** ...

  8. 【转】asp.net中@page指令的属性Inherits、Src、CodeBehind区别

    Inherits.Src.CodeBehind 在 ASP.NET 中使用代码隐藏方法来设计Web 窗体,可使页代码能够更清晰地从 HTML 内容中分离到完全单独的文件中. 通常一个 @page 指令 ...

  9. 在pycharm中启动Django服务器

    1.要是直接运行manage.py程序的话 会提示一大堆东西,那无非是提示没有传入参数.先打开mange.py,然后再运行,会提示一堆东西,表示没有配置参数.在pycharm右上角点击edit con ...

  10. Docker Dockerfile 基本结构详解

    dockerfike快速创建自定义的Docker镜像 一.目录 1.docker典型结构 2.指令介绍 3.创建docker镜像 二.结构 DockerFile分为四部分组成:基础镜像信.维护者信息. ...