c语言指针p1p2,C语言指针系列(2):你真的理解指针与内存的关系吗?
C语言指针可谓是C语言的灵魂,无论是在C语言算法,还是在数据结构,他无处不在。指针,这对于老手如同家常便饭一样的操作,却在萌新面前如同一座万丈高山!
中国的伟人曾经说过:
世上无难事,只怕有心人!
C语言指针理解得透彻不透彻,全看你有没有下功夫,不过更多是要看有没有一个合适的引子,来启蒙你对他的认知。
指针变量类型有哪些?
众所周知,C语言中的基本变量类型有:整型变量,浮点型变量与字符型变量。
基本变量类型
指针变量类型
整型(int)
整型(int *)
浮点型(float)
浮点型(float *)
双精度(double)
双精度(double *)
字符型(char)
字符型(char *)
以上列举了最常用的几种指针变量类型,分别对应其所能存储的内存地址中值的类型。
例如:int *型指针变量只能存储值为int类型的变量的内存地址。 C语言指针讲究得就是门当户对,各位同学可别乱当月老牵红线……
C语言如何声明指针变量?
在C语言中,指针的一般声明格式如下:
[指针变量类型] *[指针变量名];
如果要声明一个int* 型指针变量pt时,则有以下代码:
int *pt;
以此类推,其他类型指针变量声明不再一一赘述。
使用C语言指针
为了使用指针,c语言提供了两个特别的运算符——
取址运算符 &
取值运算符 *
在定义了一个指针变量后,只为其分配了相应的内存单元用于存放指针的值,而这个指针变量并没有指向某个特定的变量,因此在使用指针时,也需要将指针变量进行初始化。
因为指针变量存放的是变量的地址,因此对指针初始化就是将某个变量的地址赋给它。这个过程需要取址符&的帮助。
如下面的程序:
int x=5;
int *p=&x;
//将x的值赋予给p
也可以写成另一种形式:
int x=5,*p=&x;
上面两段代码效果与目地是一样的。
在输出p的值时要用到取值*:
printf("%d",*p);
深入学习
假设有以下程序代码:
int a=3;
int b=5;
int *p1=&a;
int *p2=&b;
p1=p2;
(1)声明两个整型变量,a的值为3,b的值为5
整型数值3
变量a
整型数值5
变量b
(2)将变量a,b的内存地址分别存储到p1与p2中
变量a
指针p1
变量b
指针p2
此时p1指向a,p2指向b
变量a 指针p1 把内存地址给p1 指针指向a 变量a 指针p1
变量b 指针p2 把内存地址给p2 指针指向b 变量b 指针p2
(3)将p1指向的地址修改为p2指向的地址
p1: F74EC7F7
p2: F74EC7F9
在这里大家可能会有些许迷惑,且听我道来。
我们在此要区分两个语句
p1 = p2;
这里没有取值符*,两者都为指针自身,将p1指向的内存地址修改为p2所指向的内存地址
* p1 = * p2;
有取值符*,代表是将p1指向内存地址的值修改为p2指向内存地址的值
p1=p2释图
未执行前:
p1
F74EC7F7
p2
F74EC7F9
当执行该语句后:
F74EC7F7
p1
F74EC7F9
p2
*p1 = *p2释图
未执行前:
p1
F74EC7F7
3
p2
F74EC7F9
5
执行该条语句后:
p1
F74EC7F7
5
p2
F74EC7F9
5
↓↓↓↓↓
p1
F74EC7F7
5
p2
F74EC7F9
5
现在大家明白了吗?没有没白没关系,还有第三章呢!
(未完待续…)
c语言指针p1p2,C语言指针系列(2):你真的理解指针与内存的关系吗?相关推荐
- 【DOM系列】你真的理解事件委托(事件代理)吗?
目录 1. 基本概念 1.1 原理 2. 事件冒泡和事件捕获 代码演示 3. addEventListener的第三个参数 4. 事件委托阶段案例 4.1 事件冒泡案例 4.2 事件捕获案例 5. 经 ...
- 怎样学习C语言——快速上手C语言系列之—什么是指针
指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 一,为什么需要指针? 指针解决 ...
- 易语言多级指针读取_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)
作者:21IC网络整理,排版:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方 ...
- c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt
C语言程序设计 指针.ppt 第6章 指 针,C 语言程序设计,北京科技大学 计算机系,2018/8/156.1 概述6.2 指针和指针变量6.3 指针与数组6.4 指针和函数6.5 动态存储分配,第 ...
- 指针c语言与数组,C语言指针与数组
C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝 -- Stan Kelly-Bootle 1. 数组并非指针 为什么很多人会认为指针和 ...
- c语言两个指针相等,C语言之指针,便于理解
一.指针变量定义 C语言有两种变量: 其中变量(普通变量)存储内容值:地址变量(指针变量)存储地址值. 1.定义的格式: 类型名 *指针变量名: 如: int a,b,*p1,*p2: float x ...
- C语言重点——指针篇(一篇让你完全搞懂指针)
C语言重点--指针篇(一篇让你完全搞懂指针) 一. 前言 C语言是比较偏底层的语言,为什么他比较偏底层,就是因为他的很多操作都是直接针对内存操作的. 这篇我们就来讲解C语言的一大特点,也是难点,指针和 ...
- 为什么指针被誉为 C 语言灵魂?
作者 | 编程指北 来源 | 编程指北(ID:cs_dev) 这一篇的文章主题是「指针与内存模型」. 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不 ...
- 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )
文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...
最新文章
- Hadoop集群 MapReduce初级案例
- ajax返回不刷新页面,Jquery ajax不刷新页面提交action取得返回值
- 通过 39 个 问答方式快速了解学习 Git
- python有什么隐藏功能_Python的隐藏功能
- h3c的gpu安装linux系统,h3c服务器u盘安装linux系统安装
- oracle dw报告,讲解Oracle数据库的全文索引设置步骤
- 关于windows窗体应用程序 1117
- Java实现简单的在聊天面板中显示emoji
- 微信开发的时候自定义菜单
- 2020计算机专业保研夏令营面经:中科院计算所网数机试题目
- 有赞会不会成为去中心化流量时代的淘宝
- 前端加速必备之BootCDN
- 【美团面经】后台研发一面
- [系统安全] 十八.病毒攻防机理及WinRAR恶意劫持漏洞(bat病毒、自启动、定时关机、蓝屏攻击)
- 大学必备C语言基础知识(一)
- 基于有道翻译的英翻中微信小程序
- 植物识别库java_基于百度api的植物图片识别,人脸检测,人脸对比。
- runtime从入门到精通(九)—— 万能界面跳转
- 多功能网络侦查OSINT工具,FinalRecon
- 中望3D 2021 自动标注
热门文章
- 设备断电等异常导致MP4文件无法打开的解决方案
- CSS定位+装饰+伪类选择器拓展
- 学习科技日语的过程。
- Java之单元测试和安全规范
- 本地vue-router模式设置为mode:‘history‘时,页面空白,无法加载
- neo4j图形数据库简介,基本查询(cypher基本语法)
- tiktok解除 android10,10-TikTok账号被封了怎么办?
- 牛码宝宝 - Sprint log (No.7)
- 使用Glide加载、缓存图片、解决背景出现浅绿色
- 70后 80后 90后