C语言中指针 * 和 & 的总结

前言

最近复习了C语言中指针,在网上看了一些资料,发现很多人在解释指针的时候提到了“引用”这个概念,但是C语言是没有这个概念的,大概是在学习时是用来cpp的来学习。所以在这里有一点误会。C语言中是没有引用这个概念的。如果大家在刚开始学习c语言时,尽量用GCC编译器。以免混淆一些概念。

指针

例如在有:

    int a = 10;int* p = &a;

在定义一个整型变量a后 ,定义一个整型指针p指向a,在这里p中存放的是存放变量a的地址。对于指针,谭浩强的书中举得例子就很容易让人理解。 储存就像一栋楼房,然后系统将储存划分为“页”就像是一栋楼里有很多层。然后每层又有很多房间。对应每页有很多的储存单元。 当我们需要定义一个变量时,就是划分出了一部分储存单元来让我们使用,具体的大小是由变量的类型决定的。
在上面这个例子中,我们定义了一个整型变量a,于是系统给了我们四个字节的储存单元。这四个储存单元是有一个“地址值”的,用来让我们找到我们存的“10”是在哪里。整型指针p,就是存储的就是我们a的地址。在楼房的比喻中,就像我们买下了一个房子。房子是有门牌号的。p中的内容呢,就是我们房子的门牌号。
当然,可能在一个变量中,不止拥有一个储存单元。而每个储存单元都有一个地址,在这个时候,指针中存放的值是变量的首地址。而指针一共需要访问几个单元。是由指针的类型决定的,比如定义的指针p为整型,那么就会访问四个字节。定义的指针是长整型,那么就会访问八个字节。

* 与 &

当我们在使用号时,就像我们需要网购一样。快递员是不认识我们的。但是他可以通过留下的地址将快递送过来。这个过程就是p 。意思就是可能这个人并不认识我们,但是他可以通过地址找到我们。
在上面的例子中,p就是a的地址,p 就是通过a的地址来访问a的内容。所以在输出p时,就等同于输出变量a。
而&的意识是取地址。就像我们认识的人。他们给我们寄快递。但是他们并不知道我们的具体地址。于是就要问我们。在上面的实例中,就是&a。就可以得到a的地址。

    int a = 10;int* p = &a;printf("%p\n",&a);printf("%p",p);

输出结果为

其他类型的指针

指针类型其实有很多。不仅仅局限于我们基础的几种数据结构。(char int long double)等等。
还有像 二级指针 ->指向指针地址的指针
数组指针 ->指向一个数组的指针

ps

在我们将一些功能封装成函数时,例如交换两个变量的值。

void Swap(int a,int b)
{a = a ^ b;b = a ^ b;a = a ^ b;
}

这样写是不行的。因为当系统调用函数时,会给函数的形式参数重新划分一片内存。我们这时候在函数内执行操作。其实是交换了新的两个变量的值。而我们真正想要交换的两个变量是没有改变的。而这两个形式参数的内存又会在函数执行完后释放掉。所以就不会有什么变化了。
我们将程序修改成这样。

void Swap1(int* const a, int* const b)
{*a = *a ^ *b;*b = *a ^ *b;*a = *a ^ *b;
}

通过指针来间接访问我们想要交换的变量,同样的。当系统调用函数时,也会为这里的形式参数开辟一些新的空间。但是这里我们传递给函数的是我们想要改变的变量的地址。我们通过地址间接访问变量。至于是谁拿到了我们的地址。这是无所谓的。因为在进程中我们这个变量的地址是没有改变的。
在执行下面的代码时:

int main()
{int a = 10;int b = 5;printf("%d----%d\n", a, b);Swap(a,b);printf("%d----%d\n", a, b);Swap1(&a,&b);printf("%d----%d\n", a, b);}

执行结果为:

C语言指针 * 和 总结相关推荐

  1. c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx

    c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...

  2. C语言指针数组与数组指针的区别

    C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...

  3. simple c语言,C语言——指针(simple).ppt

    C语言--指针(simple) 莆田学院计算机教研室 2003年5月 指 针 绍兴文理学院自动化教研室 2011年4月 本讲主要内容 指针概述 地址· 指针· 指针变量 指针变量作为函数参数 指针与数 ...

  4. c语言115写成16进制,C语言指针问题

    C语言指针问题 來源:互聯網  2009-04-01 16:01:29  評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: int a=115,*p;p ...

  5. C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一.有了指针,C语言就可以抛开所有束缚,直接对内存中的数据进行操作,这样,不单对数据的操作更加快捷,并且可以高效的利用空间 ...

  6. CPU 以字节为单位编址,而 C 语言指针以指向的数据类型长度作自增和自减。

    切记:CPU 以字节为单位编址,而 C 语言指针以指向的数据类型长度作自增和自减.

  7. c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)

    C语言指针让一切想法变成可能,强转和指针可以看做一项呼风唤雨的利器,但是C语言中指针应用又需要格外的小心,其更灵活的利用内存,因为不当的应用可能引起各种异常,这篇文章就是让我们一起来认识C指针,更好的 ...

  8. c语言指针的相关运算,C语言指针的运算

    本文讨论使用指针进行的运算,最重要的运算是获取指针所引用的对象或函数.也可以比较指针,使用指针来遍历一个内存区域. 使用指针读取与修改对象 间接运算符 * 生成内存中的位置,该位置的地址存储在一个指针 ...

  9. C语言指针和二维数组

    二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, ...

  10. c语言首尾指针相同 则,6.C语言指针练习题.doc

    6.C语言指针练习题.doc 一.知识点 1.? 掌握指针.地址.指针类型.空指针(NULL)等概念: 2.? 掌握指针变量的定义和初始化.指针的间接访问.指针的加减运算.指针变量比较运算和指针表达式 ...

最新文章

  1. 【CF应用开发大赛】微博社交简历
  2. Mac上安装hadoop
  3. Ubuntu 星际译王StarDict
  4. 帆软 JAVA扩展_java报表开发工具FineReport教程之报表设计:单元格扩展
  5. jenkins 脚本编写_使用Jenkins 2编写以代码形式编写管道和实现DevOps的简介
  6. tensorflow 获取checkpoint中的变量列表
  7. github速成手册
  8. cookie和session的区别及其原理
  9. 转:Python正则表达式操作指南
  10. 大学四年,各阶段学习书籍推荐(少走弯路必备)
  11. 电路仿真软件用matlab,基于MATLAB的电路仿真软件设计.doc
  12. 墙裂推荐:搜云库技术团队,整理一年的技术干货
  13. 搜索引擎使用技巧之高级搜索
  14. linux中重要文件夹介绍
  15. how to manage your time effectively!!
  16. CNN中的小tips
  17. app模式会被第三方平台模式取代吗_第三方APP逐渐被替代?网友:手机自带的足够用了...
  18. 使用java代码打印三角形、平行四边形、菱形
  19. mac上编码转换工具_25个用于高效编码的Mac工具
  20. 喜大普奔,又一国标正式进入国际标准

热门文章

  1. cat: `/user/tmp/hello.txt': No such file or directory解决办法
  2. 3.Garbage Collection
  3. 软件测试方法大全,49种测试方法,你知道几个?
  4. Deep Face Super-Resolution with Iterative Collaboration论文阅读笔记
  5. cqh-class 文件内容,类加载过程,编写第一个程序
  6. JAVA在线观看视频教程完整版
  7. php 如何让验证码刷新,php实现点击可刷新验证码_php技巧
  8. Oracle 10g 32位 下载地址
  9. matlab 点云根据法向量投影到六个平面
  10. asp.net中引用System.Web.UI.DataVisualization.Charting命名空间