一、什么是指针

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

二、指针的应用

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. 自定义七天签到View

    github传送车走你 https://github.com/guanhaoran/signin 因为这个View 是我很早之前写的,这些注释也是我今天刚想往github上传的时候 临时加的  有的注 ...

  2. 腾讯云centos7服务器环境搭建,tomcat+jdk+mysql+nginx

    软件:jdk 1.8.0_45 tomcat 8.5.8 mysql 5.6.36 nginx 1.10.x或以上 其中tomcat在centos6.8中没问题,centos7中会出现卡在启动那里 I ...

  3. Weak 和 Strong

    介绍: ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编译 ...

  4. SVN常见问题

    one or more files are in a conflicted state.(一个或多个文件处于矛盾状态)意思是这个文件已经被其他人修改过了. 然后我点击ok按钮后,找到冲突的文件再次up ...

  5. [Oracle]约束(constraint)

    (一)约束的概念 在Oracle中,可以通过设置约束来防止无效数据进入表中.Oracle一共有5种约束: 主键约束(primary key) 外键约束(foreign key) 唯一性约束(uniqu ...

  6. PHP安装sqlsrv扩展步骤,PHP如何连接上SQL

    今天捣鼓了一天,终于把PHP的sqlsrc扩展给弄好了.为了让PHP能够顺利连接上MSSQL,实在不易. 第一步:安装Wampserver 我安装的是Wampserver 2.4.17版本.注意:安装 ...

  7. (转)java之runnable jar与普通jar

    背景:项目中有时候需要导出相关的jar包,可是总是不能分清楚. 1 导出包 导出普通jar包(可作为第三方库,类似dll,so等) 在eclipse中右键选择except->java->j ...

  8. 【HTML】ie=edge(转)

    < meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" /> 这是个是 ...

  9. win7下从ruby源代码编译安装

    工作中需要在c++代码中嵌入ruby c api,然而在vs工程中编译失败,所以现在通过手动从源代码编译ruby寻找原因(之前使用rubyinstaller安装).   先从官网下载ruby 2.4. ...

  10. Java 简单的 socket 编程入门实战

    这个是给女朋友写的:) 首先需要知道我们每个电脑都可以成为server(服务器) 和 client(客户端) 我们需要使用java来实现客户端与服务器的数据传输 先帖上代码 注意这里两张代码处于两个j ...