C语言 第五章 指针(1)

news/2025/3/18 10:33:48/

目录

指针的理解

变量的访问方式

内存地址与指针

指针变量 

指针变量的定义

举例:

注意:

 指针的应用场景


指针的理解


变量的访问方式

计算机中程序的运行都是在内存中进行的,变量也是在内存中分配的空间,访问内存中变量存储的数据有两种方式:直接访问和间接访问。
直接访问,直接使用变量名进行的访问,以前的程序中都是采用这种方式。

int num1 = 10;
int num2 = 20;
int num3 = num1 + num2;

间接访问,通过指针来实现。下面看如何理解指针。


内存地址与指针
 

为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。因为每个内存单元都有地址,所以变量存储的数据也是有地址的。

通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为“指针”。
 

  • 变量名:变量名是给内存空间取的一个容易记忆的名字。 
  •  变量值:在变量单元中存放的数据值。
  • 变量的地址:变量所使用的内存空间的地址,即指针。 

指针变量
 
 

指针变量:一个变量专门用来存放另一变量在内存中数据的地址(即指针),则它称为“指针变量”。我们可以通过访问指针变量达到访问内存中另一个变量数据的目的。
 
例如上图中地址 0x00000001 是变量 i 的指针, i_pointer 就是一个指针变量。体会:指针就是内存地址,使用指针访问变量,就是直接对内存地址中的数据进行操作。


指针变量的定义

一般格式:

数据类型* 指针变量名 [=初始地址值];
 
数据类型是指针变量所指向变量的数据类型。

  • 可以是int、char、float等基本类型,
  • 也可以是数组等构造类型。

 
字符*  用于告知系统这里定义的是一个指针变量。


举例:

 int* p;  

读作“指向int的指针”或简称“int指针”,这是一个指针变量,用于存储int型的整数在内存空间中数据的地址。

#include <stdio.h>
int main(){//交换两个变量的值
//    int a=10;
//    int b=20;
//    int c;
//    c=a;
//    a=b;
//    b=c;
//    printf("a=%d\n",a);
//    printf("b=%d\n",b);int a=10;int b=20;int* p1 =&a;;int* p2 =&b;;int* pt = 0;pt=p1;p1=p2;p2=pt;printf("a=%d\n",*p1);//20printf("b=%d\n",*p2);//10}

变形写法:

 int  *p; 
 

注意:
 

  • 指针变量的名字是p,不是*p。
  • 指针变量中只能存放地址,不要将一个整数(或任何其它非地址类型的数据)赋给一个指针变量。

举例:

同一行声明两个指针变量  int* a, b; 
 
指针变量的大小:不同类型的指针变量所占用空间大小是相同的,都是8个字节 。

#include "stdio.h"int main() {//声明指针变量int* p1;int *p2;int* p3,p4;int *p5,p6;//指针初始化赋值,走NULL关键字int* p7 = NULL;return 0;
}

 指针的应用场景


场景1:

使用指针访问变量或数组的元素。

#include <stdio.h>
int main(){//为什么用指针加减操作//指针加减运算,非常适合连续的数据操作int arr[5]={11,22,33,44,55};int* p =&arr[1];printf("p==%d\n",*p);//28-2printf("p==%d\n",*(p+1));//33printf("p==%d\n",*(p-1));//11
}

场景2:

应用在数据结构中。比如:

文章来源:https://blog.csdn.net/2402_89094746/article/details/145864491
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/news/1580046.html

相关文章

MYSQL8.0数据库误删除记录恢复 MYSQL8.0数据库崩溃恢复 MYSQL8.0数据库删除表恢复

数据类型 MYSQL 8.0 数据大小 242 MB 故障检测 主机断电导致数据库崩溃,无法启动. 修复结果 收到文件后,修正不一致的地方&#xff0c;成功启动MYSQL 8.0 完成恢复 客户验收数据成功。 完成恢复。最新数据得以恢复. 客户非常满意。 友情提醒&#xff1a;重要数据一定要勤备份&…

强化学习 - PPO控制无人机

PPO&#xff08;Proximal Policy Optimization&#xff0c;近端策略优化&#xff09;是一种强化学习算法&#xff0c;用于训练智能体&#xff08;无人机&#xff09;如何在环境中做出决策。它本质上是 策略梯度&#xff08;Policy Gradient&#xff09;方法 的一种改进&#xf…

Flutter开发鸿蒙的项目已经迁移到gitcode了

昨天看有人在讨论华为这个项目是否关闭了 &#xff0c;专门咨询了华为官方团队&#xff0c;得到了切确的答复&#xff0c;这个项目没有关闭&#xff0c;只是已经迁移了&#xff0c;这里发帖告知还不知情的童鞋。 经与华为官方团队确认&#xff0c;Flutter开发鸿蒙的项目已迁移…

Oracle GoldenGate (OGG) 安装、使用及常见故障处理

Oracle GoldenGate (OGG) 安装、使用及常见故障处理 目录 概述安装前的准备Oracle GoldenGate 安装步骤配置与使用 配置管理器 (Manager)配置提取进程 (Extract)配置数据泵进程 (Pump)配置应用进程 (Replicat) 常见故障处理 故障1&#xff1a;提取进程无法启动故障2&#xff…

MCMC和泊松过程

马尔科夫链 马尔可夫链&#xff08;Markov Chain&#xff09;是一种描述随机过程&#xff08;Stochastic Process&#xff09;的数学模型&#xff0c;具有“无记忆性”&#xff08;Markov Property&#xff09;&#xff0c;即未来状态只依赖于当前状态&#xff0c;而与过去状态…

STM32全系大阅兵(2)

接前一篇文章:STM32全系大阅兵(1) 本文内容参考: STM32家族系列的区别_stm32各个系列区别-CSDN博客 STM32--STM32 微控制器详解-CSDN博客

arduino R4 WIFI读取时间并在LED矩阵上显示

arduino R4 WiFi 开发板自带 WiFi 连接模块&#xff0c;同时带有 812 LED 显示矩阵。本实验开发了一个能通过WiFi连接网络&#xff0c;获取NTP时间&#xff0c;然后在LED矩阵上滚动显示的功能。 什么是 NTP 时间 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协…

【TCP】三次挥手,四次挥手详解--UDP和TCP协议详解

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…