一、什么是指针

  “指针变量”是指用来存放变量地址的变量。指针变量也是一个变量,它和其他变量的区别在于它里面存的不是普通的数据,而是另一个变量的地址。访问变量有两种方式,第一种是直接根据变量名称取到变量的地址,然后去对应内存地址拿到变量的值,这种方式叫做“直接引用”;第二种方式是定义一个指针变量指向变量,从指针变量中拿到变量的地址,再去对应内存地址拿到变量的值,这种方式叫做“间接引用”。

二、指针的应用

2.1 如何用指针表示一个变量

  下面通过几张图片来看一下如何用指针表示一个变量,需要注意的是指针的数据类型必须和它所指向的变量的数据类型相同。

2.2 数组和指针

  数组可以存储一组相同的数据元素,它们在内存中占用的是连续的内存空间(如下图所示),所以我们可以通过指针去遍历或者操作数组。

  回文字符串是指正序和逆序读该字符串都是一样的字符串,因此可以定义两个指针,分别指向字符数组中的第一个字符和最后一个字符,然后依次向后或向前取出成对的字符,进行比较,代码如下图所示。

  从上面的例子可以看出,通过指针start++、end--,可以遍历字符串中的字符。数组是占连续的存储空间,每个元素所占得字节数就是数组数据类型的字节数,所以实际上start++移动的字节数就是数组中元素所占的字节数,那么指针如何知道元素的数据类型呢?这就回到开头说到的,定义的指针的数据类型必须和它所指向的变量数据类型相同,换句话说,就是指针只能指向和它定义的数据类型相同的变量。

2.3 指针作参数&指针作返回值

  当我们把某个功能代码封装到函数中时,可以用指针作为参数,也可以用指针作为返回值。比如下图所示例子。

  如上所示,在main函数中,由键盘输入了明文存到一个字符串中,然后调用encryption(char *)这个函数完成加密。要加密的内容存储在数组中,在调用函数的时候,需要将数组传入,这里是用指针来完成的。调用函数时传入的psw是数组的地址,被指针p_psw接收,称为指针变量的值,这个时候,就可以说指针p_psw指向了字符串数组的第一个字符。字符串是以‘\0’结尾的特殊的字符数组,所以通过指针++依次遍历字符串中每一个字符进行加密,直到指针指向‘\0’结束标志。在函数的结尾又将保留的字符串的首地址的指针作为返回值返回,实际上返回的p_temp是返回的字符数组的首地址。回到main函数,定义了一个新的指针接收返回值,其实就是让这个新指针p_new指向字符串第一个字符,所以通过puts(p_new)输出的就是加密之后的字符串。

C语言——指针的更多相关文章

  1. C语言指针转换为intptr_t类型

    1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...

  2. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

  3. 不可或缺 Windows Native (7) - C 语言: 指针

    [源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...

  4. C语言指针学习

    C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...

  5. (转载)c语言指针学习

    前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...

  6. 关于C语言指针的问题

    在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...

  7. C语言指针类型 强制转换

    关于C语言指针类型 强制转换  引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...

  8. C语言指针和数组知识总结(上)

    C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是:  %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...

  9. C语言指针操作

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...

  10. C语言指针声明探秘

    C语言指针声明探秘

随机推荐

  1. Java IO在实际项目开发中应用

    IO是java绕不过去的槛,在开发中io无处不在, 正如同 世界上本没有路,java io写多了,也就知道了大体是什么意思,在读完thinking in java 感觉就更清晰了,结合具体的业务场景, ...

  2. CSS3-loading动画(三)

    分享继续,图片看得不真切 在线演示demo:http://liyunpei.xyz/loading.html 十一.效果十一 四个小球分别包含于四个正方形div,将小球相对于正方形定位(top:0:l ...

  3. Azure PaaS服务密钥的安全性

    Azure PaaS服务,比如存储,Redis缓存,服务总线,IoT中心等等,一般通过密钥来认证客户端,也就是说只有提供正确密钥的客户端才能访问和使用对应的Azure PaaS服务,所以这个密钥是很重 ...

  4. 【学习笔记】C# 封装和继承

    封装 封装是实现面向对象程序设计的第一步 封装就是将数据.方法等集合在一个个单元中,我们称之为类 封装的意义在于保护代码/数据,屏蔽复杂性 继承 继承是所有面向对象语言不可缺少的部分 继承是为了实现类 ...

  5. 关于MUI集成微信分享遇到的坑

    今天聊一下MUI这个框架吧! 首先,用这个框架也有很长一段时间了,项目不同,涉及到的功能也有不同,之前没有涉及到微信分享相关的内容!今天,遇到了,也解决了,分享出来. 下面是手顺: 1.分享的代码是参 ...

  6. (转)VmWare下安装CentOS7图文安装教程

    场景:克服安装Linux的恐惧,想装就装.在一篇博客中看到的,很有借鉴意义   欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源 ...

  7. (转)java提高篇(一)-----理解java的三大特性之封装

    从大二接触java开始,到现在也差不多三个年头了.从最基础的HTML.CSS到最后的SSH自己都是一步一个脚印走出来的,其中开心过.失落过.寂寞过.虽然是半道出家但是经过自己的努力也算是完成了“学业” ...

  8. 【SignalR学习系列】4. SignalR广播程序

    创建项目 创建一个空的 Web 项目,并在 Nuget 里面添加 SignalR,jQuery UI 包,添加以后项目里包含了 jQuery,jQuery.UI ,和 SignalR 的脚本. 服务端 ...

  9. Linux shell 自定义函数

    一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带functi ...

  10. es6 解构赋值

    ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 关于给变量赋值,传统的变量赋值是这样的: var arr = [1,2,3];//把数组的值 ...