例8-1 :利用指针模拟密码开锁游戏。
课本给出的代码

//获取密码的两种方法
#include<stdio.h>
int main()
{int x=5342;//变量x用于存放密码值5342
//程序中定义了变量x来存放密码,再定义一个特殊的指针变量p,用于存放变量x的地址
//这样既可以通过变量名x直接得到密码值,也可以在不知道变量名的情况下,通过指针变量p所存放的x的地址 间接找到密码值 int *p=NULL;//定义整型指针变量p,NULL值为0,代表空指针p=&x;//将变量x的地址存储在p中,&是取址符//通过变量名x输出密码值printf("If I know the name of the variable, I can get it's value by name: %d\n",x);//通过变量x的地址输出密码值printf("If I know the address of the variable is: %x, then I also can get it's value by address: %d\n",p,*p);return 0;
}

地址和指针是计算机中两个重要概念。
内存单元和内存单元的地址:如果把存储器看成一个建筑物,建筑物内的房间就是存储器单元,房间号就是地址。

指针和指针变量在含义上存在一定差异。
一般来说,在C语言中,指针被认为是一种概念,是计算机内存地址的代名词之一。
而指针变量本身就是变量,和一般变量不同的是 它存放的是地址。
大多数情况下,并不特别强调它们的区别。

指针是用来存放地址的变量。
&:地址运算符
*:指针声明符

定义多个指针变量时,每一个指针变量前面都必须加上*

指针变量的类型 不是指 指针变量本身的类型,而是指 它所指向的变量的数据类型
无论何种类型的指针变量,它们都是用来存放地址的,所以尽管不同类型的变量所占的内存空间不同,但不同类型指针变量所占的内存空间大小都是相同的。

指针变量要先赋值再使用,当然指针变量被赋的值应该是地址。
下面有四条赋值语句:

p=&i;p=0;
p=NULL;p=(int*)1732;

第一条是最常用的,指针p被看做是 指向变量i,或者指针p存放变量i的地址。
第二三条是把特殊值0赋值给指针p,此时p表示空指针,C语言中的空指针不指向任何单元。
第四条使用强制转换 (int*) 来避免编译错误,指针p指向 地址为1732的int型变量。不提倡用这种语句。

p=&i; 指针p指向变量i,*p 和 i 访问同一个存储单元。

//取地址运算和使用指针 访问变量
#include<stdio.h>
int main()
{int a=3,*p;//定义整型变量 a和整型指针 pp=&a;//把变量 a的地址赋给指针 p,即 p指向 aprintf("a=%d , *p=%d\n",a,*p);//输出变量a的值 和指针p所指向变量的值 *p=10;//对指针 p所指的变量赋值,相当于对变量 a赋值 printf("a=%d, *p=%d\n",a,*p);printf("Enter a: ");scanf("%d",&a);//输入一个 a的值 printf("a=%d, *p=%d\n",a,*p);(*p)++;//指针 p所指的变量++,相当于变量 a++//*p=*p+1、++*p都是将指针 p所指向变量的值加 1 printf("a=%d, *p=%d\n",a,*p);return 0;
}

表达式 * p++ 等价于 * (p++),
先取*p的值作为表达式的值,再将指针p的值加1,运算后,p不再指向变量a

#include<stdio.h>
int main()
{int a=1,x,*p;p=&a;printf("%d\n",p);x=*p++;*p=2;//p不再指向变量 a printf("%d %d %d %d\n",a,*p,x,p);return 0;
}

对于指针变量的初始化,不能用数值作为指针变量的初值,但0除外。

C语言程序设计 密码开锁 指针的介绍相关推荐

  1. c语言形参指针 实参数组,《C语言程序设计》中的指针形参和函数体中数组实参问题的教学研究.pdf...

    <C语言程序设计>中的指针形参和函数体中数组实参问题的教学研究.pdf C C <CC语言程序设计>中的指针形参和函数体中数组实参问题的教学研究 山东理工大学计算机学院 董敬富 ...

  2. C语言用状态机来实现简单的密码开锁

    功能描述:用户连续输入正确的密码则会开锁,如果密码输入过程错误则锁会退回到初始状态,重新键入密码,即:用户只需要连续输入正确的密码即可开锁(输入错误不用撤销.也不用删除) 以上的分析和下面的代码来自& ...

  3. c语言程序设计实验周信东指针,C语言程序设计实验4数组周信东

    1.实验 4 数 组姓名:XXX 学号: 实验日期:XXX1. 实验目的和要求(1)掌握一维数组与二维数组的定义.使用及初始化方法.(2)学习数组作为函数参数的用法.(3)掌握字符数组和字符串函数的使 ...

  4. c语言通过指针变量输出10个元素,C语言程序设计第2版指针程序设计(10页)-原创力文档...

    C 语言程序设计 - 理论方法与实践(第 2 版) 7.4.1 简单指针变量作函数参数 例 7-9 用比较交换法 ,将一维数组的最 大值移到数组的最 末元素位置,交换 过程用上述 swap() 函数实 ...

  5. STM32智能门禁连接阿里云(指纹开锁、密码开锁、刷卡开锁、手机开锁)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 本文主要介绍如何使用STM32连接阿里云,如何通过各种输入设备(四种开锁方式)设置门禁打开方式,并且介绍阿里云上部的详 ...

  6. python语言程序设计实践教程答案实验六_Python语言程序设计实验指导与习题--详细介绍...

    上机实践是学习程序设计的重要教学环节.只有通过上机实践,才能真正理解程序设计的基本思想,正确灵活地使用语言中的各种要素,熟练掌握各种集成开发环境的应用和编写.调试程序的方法,从而获得应用程序设计解决实 ...

  7. 密码开锁:浙大版C语言程序设计

    作为指针基础的第一道例题,题干用了大段文字去阐释题目意思,让刚刚拿到题目的我十分的苦恼,因为题干真的好绕.但是代码思路却是十分清晰的,int 一个x 一个空指针p ,让p 指向x ,然后打印输出观察此 ...

  8. c语言程序设计实验周信东指针,C语言程序设计实验4 数组 周信东

    实验4 数组 姓名:XXX 学号:XXX实验日期:XXX 1.实验目的和要求 (1)掌握一维数组与二维数组的定义.使用及初始化方法. (2)学习数组作为函数参数的用法. (3)掌握字符数组和字符串函数 ...

  9. 【IoT】硬件产品设计:指纹锁临时密码开锁原理详解

    原理: 手机App跟门锁在出厂的时候就进行过一对一匹配算法. 此算法原理和银行保险机制相同,无需通过云端发出指令,生成一次性密码时所以也无需搭配网关. 临时密码的使用时间和次数是两个关键因素,按这两个 ...

最新文章

  1. 空函数有参函数调用参数的注意事项Swift 1.1语言
  2. 大数据SQL日常学习——NVL函数
  3. 小米10青春版跑分流出:搭载骁龙720G芯片 下周一见!
  4. 无法重新声明块范围变量。此处也声明了 。_Go 语句块与作用域
  5. 代理模式(Proxy)--静态代理
  6. sql重命名数据库_SQL重命名数据库
  7. gazebo 直接获取传感器数据_如何以最简单的方式获取传感器数据?
  8. matlab神经网络工具箱简介
  9. 【行列式2】n阶行列式的展开
  10. 计算机的物理地址怎么写,电脑物理地址怎么查
  11. 【pkgs.org】linux/uinx依赖包源网站推荐+如何添加该网站到debian源
  12. 《机器学习入门实战》第 01 篇 如何入门机器学习?
  13. php创蓝253四要素认证_创蓝253配置
  14. 转换质量分数与摩尔分数
  15. HLS协议深入分析——时间线介绍(二)
  16. 本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止.
  17. 跨平台桌面应用的开发框架——Electron
  18. 树莓派远程桌面连接-使用Windows自带远程桌面连接工具
  19. android 進度條_Android ProgressBar 反向進度條/進度條從右到左走
  20. 推荐:移动端前端UI库—Frozen UI、WeUI、SUI Mobile

热门文章

  1. Ubuntu安装pcb制图工具
  2. 【离散数学】二元关系
  3. Linux直接上传文件rz命令和导出文件sz命令
  4. 2015计算机等级考试,2015计算机等级考试
  5. 大气简洁手绘风商务计划书PPT模板
  6. 全国计算机等级考试.pdf,全国计算机等级考试试题49662.pdf
  7. 第十单元---前后连调
  8. Emac的使用与编程学习笔记
  9. ubuntu14.04快捷键控制笔记本触摸板的开启与关闭
  10. 病态!------沉沦的病态