C语言指针教程----入门到精通<一>

一、指针是什么?

指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元。我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等)。通过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没有带来任何改变。

时间: 2024-08-30 02:55:30

C语言指针教程----入门到精通<一>的相关文章

C语言指针教程----入门到精通&lt;二&gt;

数组与指针: 一: 指针既然可以指向变量,那么必然可以指向一个数组.本节探讨数组与指针的关系.首先读者必须明白,数组名代表数组中首元素的地址. 那么如何表示数组中其他元素的地址以及其他元素本身呢? p+i或a+i就是a[i]的地址:相应的, *(p+i)或*(a+i)就表示的a[i]元素. 已经提到了数组名代表数组首元素地址了,那么所有用数组名做参数的函数都可以改写 成用指针做参数的函数. 二:多维数组的情况. 这里,读者首先有个意识,多维数组每一维也都是一维数组.假设有个二维数组a[3][4]

Python基本语法,python入门到精通[二]

在上一篇博客Windows搭建python开发环境,python入门到精通[一]我们已经在自己的windows电脑上搭建好了python的开发环境,这篇博客呢我就开始学习一下Python的基本语法.现在练习的开发环境是基于windows的,如果有朋友喜欢linux或者mac的话,只要有需求,我后续的可以给出对应的博文介绍,其实也是换汤不换药,没需求我就懒得说了. v写在前面 python你不去认识它,可能没什么,一旦你认识了它,你就会爱上它 v郑重承诺 我承认,现在园子里烂尾的系列博文比比皆是,

Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器

Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据类. · Views: 应用程序动态生成 HTML所使用的模板文件. · Controllers: 处理浏览器的请求,取得数据模型,然后指定要响应浏览器请求的视图模板. 本系列教程,我们将覆盖所有这些概念,并告诉

iOS开发-UI 从入门到精通(二)

iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI开发我们需要手动管理内存,所以我们要把ARC关掉(Xcode关掉ARC的步骤): (1)打开Xcode选中当前工程: (2)选中Build Settings: (3)在输入框内输入count: (4)选择Objective-C Automatic Reference Counting  将其设置为 

mybatis从入门到精通(二) 增删查改

mybatis从入门到精通(二) 增删查改 一丶前言 "增删查改"是后台开发的常用操作, 因此, 学习mybatis或者其他orm框架有必要统一学习一下"增删查改". 二丶准备开发环境 使用"mybatis从入门到精通(一) 入门"准备的开发环境 三丶查 -- <select/> UserMapper.java User selectUser(@Param("userId") int userId); UserMa

C语言学习从入门到精通书籍,10万读者都认可

C语言程序设计从入门到精通 10万读者认可的编程图书精粹 零基础自学编程的入门图书 详解C语言编程思想和核心技术 很多初学者,对C语言.c++的概念都是模糊不清的,C语言.c++是什么,能做什么,学的时候该按照什么线路去学习,学完往哪方面发展,想深入了解,详情可以点击有道云笔记链接了解:http://note.youdao.com/noteshare?id=bd7b6584fb92a7af9851901d7af4dd77 原文地址:https://www.cnblogs.com/ITbianch

C语言:指针的几种形式二

一.const指针 1.const int* p和int const* p:两者意义是相同的.指向的内容是只读数据,不可以q改变:但是指向的地址可以改变. 2.int* const p:必须先对指针初始化,而且指向的地址是只读的,不可以再被改变:但是指向的内容可以改变. 3.const int* const p:既不可以改变指针指向的地址,也不可以改变指针指向的内容. 二.指针数组:元素类型全是指针 类型名称*数组名[数组长度] 例如: char* pc[10]:字符指针数组,常用来可以表示一个

git详细使用教程入门到精通(史上最全的git教程)

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不 需要联网了,因为版本都是在自己的电脑上.既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上 改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了. 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器

C语言指针轻松入门

& 表示取地址 * 表示取值 常量指针 指向一个常量的指针,     int a = 4;    int b = 6;    int const *p = &a;    //常量指针    *p = 66; // 不能修改,指向的值是个常量(不能通过指针改变)(只可以读取,不可改变,函数参数chage(int const *p))    a = 44;    // 变量自身可以修改    p = &b; 指针常量 一个常量的值时指针:      int c = 66;     in