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):你真的理解指针与内存的关系吗?相关推荐

  1. 【DOM系列】你真的理解事件委托(事件代理)吗?

    目录 1. 基本概念 1.1 原理 2. 事件冒泡和事件捕获 代码演示 3. addEventListener的第三个参数 4. 事件委托阶段案例 4.1 事件冒泡案例 4.2 事件捕获案例 5. 经 ...

  2. 怎样学习C语言——快速上手C语言系列之—什么是指针

    指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识.所以本文尽可能的通过一篇文章完全讲解指针. 一,为什么需要指针? 指针解决 ...

  3. 易语言多级指针读取_C语言指针难吗?纸老虎而已,纯干货讲解(附代码)

    作者:21IC网络整理,排版:晓宇 微信公众号:芯片之家(ID:chiphome-dy) 指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方 ...

  4. c语言程序设计 指针 .ppt,C语言程序设计 指针.ppt

    C语言程序设计 指针.ppt 第6章 指 针,C 语言程序设计,北京科技大学 计算机系,2018/8/156.1 概述6.2 指针和指针变量6.3 指针与数组6.4 指针和函数6.5 动态存储分配,第 ...

  5. 指针c语言与数组,C语言指针与数组

    C语言指针与数组 数组的下标应该从0还是1开始? 我提议的妥协方案是0.5,可惜他们未予认真考虑便一口回绝    -- Stan Kelly-Bootle 1. 数组并非指针 为什么很多人会认为指针和 ...

  6. c语言两个指针相等,C语言之指针,便于理解

    一.指针变量定义 C语言有两种变量: 其中变量(普通变量)存储内容值:地址变量(指针变量)存储地址值. 1.定义的格式: 类型名 *指针变量名: 如: int a,b,*p1,*p2: float x ...

  7. C语言重点——指针篇(一篇让你完全搞懂指针)

    C语言重点--指针篇(一篇让你完全搞懂指针) 一. 前言 C语言是比较偏底层的语言,为什么他比较偏底层,就是因为他的很多操作都是直接针对内存操作的. 这篇我们就来讲解C语言的一大特点,也是难点,指针和 ...

  8. 为什么指针被誉为 C 语言灵魂?

    作者 | 编程指北 来源 |  编程指北(ID:cs_dev) 这一篇的文章主题是「指针与内存模型」. 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不 ...

  9. 【C 语言】数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )

    文章目录 前言 一.数组符号 [] 与 指针 * 符号 使用效果 基本等价 二.数组首地址 与 指针 本质区别 前言 参考 [C 语言]指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方 ...

最新文章

  1. Hadoop集群 MapReduce初级案例
  2. ajax返回不刷新页面,Jquery ajax不刷新页面提交action取得返回值
  3. 通过 39 个 问答方式快速了解学习 Git
  4. python有什么隐藏功能_Python的隐藏功能
  5. h3c的gpu安装linux系统,h3c服务器u盘安装linux系统安装
  6. oracle dw报告,讲解Oracle数据库的全文索引设置步骤
  7. 关于windows窗体应用程序 1117
  8. Java实现简单的在聊天面板中显示emoji
  9. 微信开发的时候自定义菜单
  10. 2020计算机专业保研夏令营面经:中科院计算所网数机试题目
  11. 有赞会不会成为去中心化流量时代的淘宝
  12. 前端加速必备之BootCDN
  13. 【美团面经】后台研发一面
  14. [系统安全] 十八.病毒攻防机理及WinRAR恶意劫持漏洞(bat病毒、自启动、定时关机、蓝屏攻击)
  15. 大学必备C语言基础知识(一)
  16. 基于有道翻译的英翻中微信小程序
  17. 植物识别库java_基于百度api的植物图片识别,人脸检测,人脸对比。
  18. runtime从入门到精通(九)—— 万能界面跳转
  19. 多功能网络侦查OSINT工具,FinalRecon
  20. 中望3D 2021 自动标注

热门文章

  1. 设备断电等异常导致MP4文件无法打开的解决方案
  2. CSS定位+装饰+伪类选择器拓展
  3. 学习科技日语的过程。
  4. Java之单元测试和安全规范
  5. 本地vue-router模式设置为mode:‘history‘时,页面空白,无法加载
  6. neo4j图形数据库简介,基本查询(cypher基本语法)
  7. tiktok解除 android10,10-TikTok账号被封了怎么办?
  8. 牛码宝宝 - Sprint log (No.7)
  9. 使用Glide加载、缓存图片、解决背景出现浅绿色
  10. 70后 80后 90后