C语言指针教程----入门到精通<一>
来源:互联网 发布:php程序员简历模板下载 编辑:程序博客网 时间:2024/06/07 01:06
一、指针是什么?
指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元。我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等)。通过C里面的取地址符号&和取所指内容的符号*可以很方便的表示指针以及指针所指的变量之间的关系。
二、为什么要用指针?
为什么要用指针?指针能够带来哪些好处?以下内容引用课本上的内容:
“正确而灵活的应用的指针,可以有效的表示复杂的数据结构;能够动态的分配内存;方便的使用字符串;有效而方便的使用数组;在调用函数时获得一个以上结果;能直接处理内存单元地址等”
以上的概括应该算是比较完整的,但是对于初学C的人可能又会理解起来很抽象(可能都理解不了什么是数据结构);我们尝试从最简单的-----“在调用函数时获得一个以上结果”来看看指针的作用。
1》值传递:C中在函数调用时始终采取“值传递”的方式。意思是这样的:并不是实参直接参与了函数(参加了函数内的各类操作),只是实参把他的值传递给形参去参与函数,完成函数内的操作(函数调用时形参被分配了内存,形参的值是实参的拷贝;但要明白,形参和实参不是一个变量,不占用相同的内存,形参发生变化了实参不一定变化。就好比三个变量a,b,c执行了步骤:b=a;b=c后,a不一定等于c)
例1:请看下面的代码。代码是要实现两个数(a,b)的交换,于是构造了交换函数swap;但是能完成目的吗?
例2:那么怎么办呢?应用指针。理解下面的程序,他能很好的完成数字交换的工作。
这里面可能有同学会疑问“为什么这样就可以?这里函数调用也是值传递啊”。
对。这里也是但值传递;但是在swap里面,是根据指针对所指向的变量进行了操控,(可以给他起个名字-----上帝之手)你心里要明白,我们在函数调用时,不是x和y互相
交换了,而是通过这两个指针,对他们所指的内容(即a,b本身)进行了调换。
例3:如果你理解了以上我所说的,再看看下面这段代码,他能完成任务吗?
怎么样?是不是有点糊涂。我来帮你理理思路。就算你用指针做函数参数,函数调用依旧是值传递的。例2中,x,y指向a,b,通过*x,*y就可以改变a,b;例3中,x,y指向a,b,swap交换了x,y;可这对主函数里的c,d指针以及变量a,b没有带来任何改变。
- C语言指针教程----入门到精通<一>
- C语言指针教程----入门到精通<二>
- JavaScript教程--从入门到精通(一)
- C语言从入门到精通 试读
- C语言 入门到精通100题
- C语言从入门到精通笔记
- 《c语言从入门到精通》看书笔记——第10章 指针
- 蓝鸥iOS从零基础到精通就业-C语言入门 16指针
- 蓝鸥iOS从零基础到精通就业-C语言入门 17指针二
- 蓝鸥iOS从零基础到精通就业-C语言入门 11函数一
- C语言入门之指针用法教程
- JavaScript教程--从入门到精通(一)
- JavaScript教程--从入门到精通(一)
- Windows 2008从入门到精通系列教程(一)
- 【TRIO-Basic从入门到精通教程一】软件安装
- 2016 Git 教程 从入门到精通(一)
- GO语言入门到精通(一)Golang环境搭建
- mybatis入门到精通教程
- 移动互联网的垂直化与面向组织的社交关系
- tutorialspoint:程序员必备网站
- 重新开始写博客
- MVC设计模式
- 【性能专题】性能调优的层次
- C语言指针教程----入门到精通<一>
- jsp input 深入
- 多进程多线程的gdb调试
- windows批处理命令:递归删除.svn文件
- 接口和抽象类
- int 10H参数详解
- UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
- 模拟项目结构——观察者模式
- [java语法]基本语法(7) 面向对象--抽象类与接口