C语言——指针
| 一、什么是指针 |
“指针变量”是指用来存放变量地址的变量。指针变量也是一个变量,它和其他变量的区别在于它里面存的不是普通的数据,而是另一个变量的地址。访问变量有两种方式,第一种是直接根据变量名称取到变量的地址,然后去对应内存地址拿到变量的值,这种方式叫做“直接引用”;第二种方式是定义一个指针变量指向变量,从指针变量中拿到变量的地址,再去对应内存地址拿到变量的值,这种方式叫做“间接引用”。
| 二、指针的应用 |
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语言——指针的更多相关文章
- C语言指针转换为intptr_t类型
1.前言 今天在看代码时,发现将之一个指针赋值给一个intptr_t类型的变量.由于之前没有见过intptr_t这样数据类型,凭感觉认为intptr_t是int类型的指针.感觉很奇怪,为何要将一个指针 ...
- [转]C语言指针学习经验总结浅谈
指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...
- 不可或缺 Windows Native (7) - C 语言: 指针
[源码下载] 不可或缺 Windows Native (7) - C 语言: 指针 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 指针 示例cPointer.h #i ...
- C语言指针学习
C语言学过好久了,对于其中的指针却没有非常明确的认识,趁着有机会来好好学习一下,总结一下学过的知识,知识来自C语言指针详解一文 一:指针的概念 指针是一个特殊的变量,里面存储的数值是内存里的一个地址. ...
- (转载)c语言指针学习
前言 近期俄罗斯的陨石.四月的血月.五月北京的飞雪以及天朝各种血腥和混乱,给人一种不详的预感.佛祖说的末法时期,五浊恶世 ,十恶之世,人再无心法约束,道德沦丧,和现在正好吻合.尤其是在天朝,空气,水, ...
- 关于C语言指针的问题
在学习关于C语言指针的时候,发现这样一个问题,代码如下: #include<stdio.h> #include<stdlib.h> #include<string.h&g ...
- C语言指针类型 强制转换
关于C语言指针类型 强制转换 引用一篇文章: C语言中,任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值.不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个 ...
- C语言指针和数组知识总结(上)
C语言指针和数组知识总结(上) 一.指针的基础 1.C语言中,变量的值能够通过指针来改变,打印指针的语句符号可以是: %08x 2.指针的本质 指针的本质就是变量,那么既然是变量,那么一定会分配地址 ...
- C语言指针操作
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...
- C语言指针声明探秘
C语言指针声明探秘
随机推荐
- Vulkan Tutorial 26 view and sampler
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 在本章节我们将为图形管线创建另外两个资源来对图像进行采样.第一个资源我们之前已经接触 ...
- HDOJ 2209 贪心
翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- Wince 创新布局
如果你的项目是用wince开发并且机器是小型的pda,你可以考虑有这种布局方式. IDE上布局,如图 /// <summary> /// 显示层 /// </summary> ...
- gulp静态资源构建、压缩、版本号添加
公司移动端商城使用前后分离方案,前台nginx静态文件,js使用requirejs模式,使用gulp压缩添加版本号时发现问题, 问题1.在公共的js配置中,引用的路径是写死的,缓存会一直存在. 解决方 ...
- 关于SQL经典题
最近刚刚练过的一道sql分享给大家, 先上题目: -- 部门表 CREATE TABLE DEPT( DEPTNO INT PRIMARY KEY, -- 部门编号 DNAME VARCHAR(14) ...
- 登录界面Demo
今天记载一个Demo,这个是我练习项目中用到,供新手看看,界面图:
- UWP:使用Behavior实现Button点击动态效果
废话不多说,先上效果 没有做成安卓那种圆形的原因是...人家真的不会嘛... 好了下面是正文: 首先在工程中引入Behavior的库,我们使用Nuget. 在项目->引用上点击右键,点击管理Nu ...
- 关于MUI集成微信分享遇到的坑
今天聊一下MUI这个框架吧! 首先,用这个框架也有很长一段时间了,项目不同,涉及到的功能也有不同,之前没有涉及到微信分享相关的内容!今天,遇到了,也解决了,分享出来. 下面是手顺: 1.分享的代码是参 ...
- (转)硬盘分区备忘(主分区,扩展分区和逻辑分区)以及Linux硬盘分区工具parted 介绍
场景:最近在学习Linux的基础知识,不可避免的设计到Linux的磁盘分区,以前做过总结,但是那种总结就是复制别人的文章,总结完就不想看第二遍,所以很容易就遗忘了!清楚明白的理解分区后,我就可以在自己 ...
- (转)java反射机制及简单工厂模式
第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...