C语言指针 * 和 总结
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语言指针 * 和 总结相关推荐
- c语言获取指针分配的字节数,c语言指针知识点总结(共6篇).docx
c语言指针知识点总结(共6篇) C语言指针教学中的知识点分析与总结 摘要:分析指针的基本概念及指针在数组.函数.字符串.动态存储分配等方面的应用,提出指针教学过程中易混淆概念及注意事项,对初学者深入理 ...
- C语言指针数组与数组指针的区别
C语言指针数组与数组指针的区别 首先,顾名思义 数组指针是一个指针,是指向一个数组的指针,如 int (a*)[5]:这就是一个指向含有5个元素的数组的指针 指针数组是一个数组,它包含的元素全是指针变 ...
- simple c语言,C语言——指针(simple).ppt
C语言--指针(simple) 莆田学院计算机教研室 2003年5月 指 针 绍兴文理学院自动化教研室 2011年4月 本讲主要内容 指针概述 地址· 指针· 指针变量 指针变量作为函数参数 指针与数 ...
- c语言115写成16进制,C语言指针问题
C语言指针问题 來源:互聯網 2009-04-01 16:01:29 評論 分類: 電腦/網絡 >> 程序設計 >> 其他編程語言 問題描述: int a=115,*p;p ...
- C语言指针总结大学霸IT达人
C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一.有了指针,C语言就可以抛开所有束缚,直接对内存中的数据进行操作,这样,不单对数据的操作更加快捷,并且可以高效的利用空间 ...
- CPU 以字节为单位编址,而 C 语言指针以指向的数据类型长度作自增和自减。
切记:CPU 以字节为单位编址,而 C 语言指针以指向的数据类型长度作自增和自减.
- c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
C语言指针让一切想法变成可能,强转和指针可以看做一项呼风唤雨的利器,但是C语言中指针应用又需要格外的小心,其更灵活的利用内存,因为不当的应用可能引起各种异常,这篇文章就是让我们一起来认识C指针,更好的 ...
- c语言指针的相关运算,C语言指针的运算
本文讨论使用指针进行的运算,最重要的运算是获取指针所引用的对象或函数.也可以比较指针,使用指针来遍历一个内存区域. 使用指针读取与修改对象 间接运算符 * 生成内存中的位置,该位置的地址存储在一个指针 ...
- C语言指针和二维数组
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, ...
- c语言首尾指针相同 则,6.C语言指针练习题.doc
6.C语言指针练习题.doc 一.知识点 1.? 掌握指针.地址.指针类型.空指针(NULL)等概念: 2.? 掌握指针变量的定义和初始化.指针的间接访问.指针的加减运算.指针变量比较运算和指针表达式 ...
最新文章
- 【CF应用开发大赛】微博社交简历
- Mac上安装hadoop
- Ubuntu 星际译王StarDict
- 帆软 JAVA扩展_java报表开发工具FineReport教程之报表设计:单元格扩展
- jenkins 脚本编写_使用Jenkins 2编写以代码形式编写管道和实现DevOps的简介
- tensorflow 获取checkpoint中的变量列表
- github速成手册
- cookie和session的区别及其原理
- 转:Python正则表达式操作指南
- 大学四年,各阶段学习书籍推荐(少走弯路必备)
- 电路仿真软件用matlab,基于MATLAB的电路仿真软件设计.doc
- 墙裂推荐:搜云库技术团队,整理一年的技术干货
- 搜索引擎使用技巧之高级搜索
- linux中重要文件夹介绍
- how to manage your time effectively!!
- CNN中的小tips
- app模式会被第三方平台模式取代吗_第三方APP逐渐被替代?网友:手机自带的足够用了...
- 使用java代码打印三角形、平行四边形、菱形
- mac上编码转换工具_25个用于高效编码的Mac工具
- 喜大普奔,又一国标正式进入国际标准
热门文章
- cat: `/user/tmp/hello.txt': No such file or directory解决办法
- 3.Garbage Collection
- 软件测试方法大全,49种测试方法,你知道几个?
- Deep Face Super-Resolution with Iterative Collaboration论文阅读笔记
- cqh-class 文件内容,类加载过程,编写第一个程序
- JAVA在线观看视频教程完整版
- php 如何让验证码刷新,php实现点击可刷新验证码_php技巧
- Oracle 10g 32位 下载地址
- matlab 点云根据法向量投影到六个平面
- asp.net中引用System.Web.UI.DataVisualization.Charting命名空间