【C语言】一文彻底理解指针,通俗易懂
前言
众所周知,C语言是较为底层的语言,许多操作是直接对内存进行操作,既然谈到C语言,那就不得不说道C语言的独特之处——指针
针对int *p
进行讲解,当你能理解这3个后,指针就明白了
一、 变量存储过程及原理
1.赋值
结果是9
我们需要知道对于int a = 9;
这句话,计算机做了什么?
定义a
int a
,在内存中开辟了一个int大小的空间,也就是4个字节(32位),然后将这个空间分配给了a,这就是a的空间了
给a赋值
a = 9
,在a的空间里存放9这个数,然后将十进制的9转换成二进制的9
这里存储数据的方式是大端模式,简单来说就是把数据的低字节保存在内存的高地址中,有兴趣的可以了解一下,这里不多赘述
可以看到00001001是我们存储进去的数值,根据大端模式,数据的低字节保存在内存的高地址中,所以就是上图的存储格式
2.外部手动赋值
scanf("%d",&a);
执行这行代码时,输入一个int型的数值,例如8,然后&a
,即找到a的地址,将8转为二进制,存入到a的空间,这也是为什么需要加&
号
总结
一个变量的存储,首先是在内存开辟一个空间,然后把这个空间分配给某一变量,再对变量进行存储
二、 指针变量int *p
1.指针类型
指针类型int *p
,虽然*p
是写在一块的,但是变量名是p
,类型是int *
,也就是整形的指针类型,理清指针类型和变量后,其实已经差不多明白了
结果
可见变量p里存放的是a的地址
错误写法:
一个事指针类型,一个事int类型,是无法相互操作的(类型不匹配)
2.指针存储过程及原理
这一段代码看看计算机是如何运行的
- 可以将int类型变量的地址赋给
int *
指针类型变量 - &是取地址符,&a就是拿到a的地址
总结:
总的来说,就是针对a的空间,给了p一把钥匙,让p也可以对a的那片空间进行操作
指针操作
结果
总结:
除了定义指针变量的时候,变量前面有*
为定义类型
其他时候均为指针的取值操作,注意是取值,不是取地址,拿的是指针变量中存放的值
个人理解,欢迎评论探讨!
【C语言】一文彻底理解指针,通俗易懂相关推荐
- c语言回文字符串用指针,C语言-判断回文字符串【函数+指针】(一)
例题一: 6-1 判断回文字符串 (20 分) 本题要求编写函数,判断给定的一串字符是否为"回文".所谓"回文"是指顺读和倒读都一样的字符串.如"XY ...
- C语言重点——指针篇(一文让你完全搞懂指针)| 从内存理解指针 | 指针完全解析
有干货.更有故事,微信搜索[编程指北]关注这个不一样的程序员,等你来撩~ 注:这篇文章好好看完一定会让你掌握好指针的本质 C语言最核心的知识就是指针,所以,这一篇的文章主题是「指针与内存模型」 说到指 ...
- 深入理解指针:一文让你彻底理解指针
好多人都说指针很难,其实指针并不难,你不是不懂指针,你是不懂内存管理,搞懂内存管理,指针就是纸老虎 内存物理上的实现我们不用关心,这是硬件工程师需要关心的问题,作为软件工程师,我们只需要了解内存的抽象 ...
- 【C语言】深入浅出理解指针及内存与指针的关系(详细讲解+代码展示)
目录 概述 内存 内存含义 内存作用: 物理存储器和存储地址空间 物理存储器:实际存在的具体存储器芯片. 存储地址空间:对存储器编码的范围. 内存地址 指针和指针变量 指针基础知识 指针变量的定义和使 ...
- c语言通过指针变量输出10个元素,C语言程序设计第2版指针程序设计(10页)-原创力文档...
C 语言程序设计 - 理论方法与实践(第 2 版) 7.4.1 简单指针变量作函数参数 例 7-9 用比较交换法 ,将一维数组的最 大值移到数组的最 末元素位置,交换 过程用上述 swap() 函数实 ...
- 一文搞懂指针,指针的指针,悬浮指针,野指针
一文搞懂指针,指针的指针,悬浮指针,野指针 学习C语言过程中,指针的概念往往是重难点,伴随着时隐时显的*,令人头晕.实际上指针并非如此复杂,掌握最基础概念,有利于我们更深刻的理解指针. [百科概念] ...
- c语言中指针往内存写值,C语言编程常见问题解答之指针和内存分配
指针为C语言编程提供了强大的支持--如果你能正确而灵活地利用指针,你就可以直接切入问题的核心,或者将程序分割成一个个片断.一个很好地利用了指针的程序会非常高效.简洁和精致. 利用指针你可以将数据写入内 ...
- c语言形参指针 实参数组,《C语言程序设计》中的指针形参和函数体中数组实参问题的教学研究.pdf...
<C语言程序设计>中的指针形参和函数体中数组实参问题的教学研究.pdf C C <CC语言程序设计>中的指针形参和函数体中数组实参问题的教学研究 山东理工大学计算机学院 董敬富 ...
- C语言 第八章 函数、指针与宏
一.函数 函数是一个包含完成一定功能的执行代码段.我们可以把函数看成一个"黑盒子", 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的.外部程序 ...
最新文章
- 埃森哲报告:2017年数字化浪潮下的医疗行业五大趋势
- HCNA多区域OSPF配置
- STM32 基础系列教程 34 - Lwip_tcp_server
- 八中计算机是学啥的,北京八中:居然有这么好玩的课
- 数据科学家是个性感的工作?我信你个鬼!
- 7-71 爬动的蠕虫 (15 分)
- VMware esxi在线增加Linux LVM硬盘不需重新启动
- MES(制造企业生产过程执行管理系统)
- 详解大小额支付与超级网银
- 【读取GPS星历文件】读取GPS的星历文件,并动态显示卫星移动效果
- 字节跳动java面试题,附详细答案解析
- python二手房课程设计_基于python爬取链家二手房信息代码示例
- win10开热点后,手机连接显示IP配置失败(或显示正在连接中)
- 提供资产证券化投行业务的“点石金融”能在中国点石成金吗?
- Unity(OpenGL)实现“阴阳师画符”、划线功能
- 项目实战 - tpshop商城项目环境搭建
- 对象可以创建数组吗_企业微信活码如何创建?活码可以统计渠道来源吗?
- flac转换成mp3,4种方法教会你
- 如何将笔记本自带键盘禁止及回复
- 城市大脑建设的3个误区,大脑模型的分歧是关键
热门文章
- 【office2010】利用尾注添加参考文献
- [5-23]绿色精品软件每天更新[uc23整理]
- 前端js拼接Json串
- C++语言课程设计——超市商品管理系统
- 74ls163是同步清零吗_74LS163是具有同步清零功能的十六进制计数器,要
- java gette_Java setter,getter(滚压模具)
- TFTP协议解析及C/C++代码实现
- 笔记本电脑安装固态硬盘并重装win10系统
- InnoDB: Assertion failure in thread 140536591259392 in file page0zip.ic
- Oracle 企业管理器DataBase Control使用说明