一、什么是指针

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

二、指针的应用

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. 闭包JS

    一句话概括的话:闭包就是一个函数,捕获作用域内的外部绑定. 官方的定义:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因为这些变量也称为该表达式的一部分. 自由变量和闭包的关系:自 ...

  2. VB6之借助zlib实现gzip解压缩

    这是个简版的,可以拿来做下网页gzip的解压缩,整好我的webserver还不支持这个,有时间了就加上. zlib.dll下载请点击我! 模块zlib.bas的代码如下: 'code by lichm ...

  3. Pandas数据处理实战:福布斯全球上市企业排行榜数据整理

    手头现在有一份福布斯2016年全球上市企业2000强排行榜的数据,但原始数据并不规范,需要处理后才能进一步使用. 本文通过实例操作来介绍用pandas进行数据整理. 照例先说下我的运行环境,如下: w ...

  4. centos7架设vsftpd服务

    网络控制相关命令: systemctl status network 网络状态 systemctl restart network 网络重启 查看网络状态: nmcli connection show ...

  5. [HDU1512/ZOJ2334]Monkey King-左偏树-可合并堆

    Problem Monkey King Solution 本题是裸的左偏树,一个模板就可以过了.对于每个操作对节点先删除/2再合并. 注意本题在HDU上评测特别坑,是多组数据,而且经常出现MLE的情况 ...

  6. IE事件处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. nodejs-ORM 操作数据库中间件waterline的使用

    waterline和Sails.js同一团队开发,支持几乎所有的主流数据库,是nodejs下一款非常强大的orm,可以显著提升开发效率 一.waterline支持的数据库 二.waterline的配置 ...

  8. 【转载】Android 开发 命名规范

    原文地址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...

  9. 【.net 深呼吸】在运行阶段修改应用配置文件

    上一篇博文中,老周所介绍的自行编写的配置类,虽然能够很好地做封装,但它仅允许修改用户级别的配置,所以文件都是保存到用户配置目录下的.可是,许多情况下,我们还是不考虑用户隔离,而是能够直接修改与应用程序 ...

  10. Everything 使用记录

    背景:在windows环境下,使用系统自带的搜索框经常出现搜索不到指定文件的问题,在网上无意发现了这款软件,真的很好用! 1 文件列表 建立文件列表主要是为了以后可以在指定的目录内查找自己想要的文件, ...