C语言入门Day_23 指针的使用

news2024/11/26 2:26:12

目录

前言:

1.指针运算符

2.指针的运算和使用

3.易错点

4.思维导图


前言:

上一篇博客中我们了解到指针的两个运算符号":

一个是星号*,一个是&,他们的名字分别是指针运算符取地址运算符

1.指针运算符

1.1

指针运算符和取地址运算符是一对“互逆”的运算符。

指针运算符*是取出某个内存地址里面存储的变量的数据;

取地址运算符&是获取某个存储了数据的变量的内存地址。

1.2

int number_1=10;
int number_2=55;
int *p1;
p1=&number_1;
printf("%d\n",p1);
p2=&number_2;
printf("%d\n",p2);

 1.定义了两个整型变量number_1和number_2

int number_1 = 10;

int number_2 = 55;

2.定义了一个指针p1

int *p1;

3.取出变量number_1的地址赋值给指针p1

p1 = &number_1;

int number_1=10;
int number_2=55;
int *p1;
p1=&number_1;
printf("%d\n",p1);
p2=&number_2;
printf("%d\n",p2);

4.打印指针p1内存地址里存储的数据

printf("%d\n", *p1);

5.再取出变量number_2的地址赋值给指针p

p1 = &number_2;

6.打印指针p2内存地址里存储的数据

printf("%d\n", *p1)

1.3

这里:

*星号是指针运算符,它的作用是访问这个内存地址所存储的数据

&取地址运算符,它的作用是获取这个变量对应的内存地址

我们再来看看一个指针的内存地址和内存地址所存储的数据:

int number_1=5;
int *p1;
p1=&number_1;
printf("内存地址%p\n",p1);
printf("内存地址中的所有数据为%d\n",*p1);

1.定义一个变量

int number_1 = 5;

2.定义一个指针

int *p1;

3.把变量number_1的内存地址赋值给p1

p1 = &number_1;

4.打印这个内存地址,注意格式符号是%p

printf("内存地址%p\n", p1);

5.打印这个内存地址所存储数据

printf("内存地址所存的数据%d\n", *p1);

1.4

之所以说这两个符号是“互逆”的,

是因为一个符号是知道内存地址,然后访问这个内存地址所存储的数据——指针运算符*

另一个符号是知道变量数据,然后取出这个变量数据的内存地址——取地址运算符&

我们知道指针运算符可以访问内存地址所存储的数据,同时它还可以修改内存地址所存储的数据。

接下来我们来学习指针的赋值和运算等等会修改指针指向的数据的方式:

2.指针的运算和使用

2.1

除了访问指针所指向的数据以外,我们还可以给指针所指向的变量进行赋值,也就是修改它的数据。

int a=1;
int*p;
p=&a;
printf("%d\n",*p);
*p=100;
printf("%d\n",*p);
printf("%d\n",a);

1.定义一个整型变量和指针

int a = 1;

int *p;

2.把变量a的地址指向指针p

p = &a;

3.打印p的值

printf("%d\n", *p);

int a=1;
int*p;
p=&a;
printf("%d\n",*p);
*p=100;
printf("%d\n",*p);
printf("%d\n",a);

4.修改指针p指向的数据,给它赋值100

*p = 100;

5.打印指针p指向的数据值

printf("%d\n", *p);

6.打印变量a的数据,我们可以发现它的值也改变了,成了100

printf("%d\n", a);
 

2.2

我们可以看到随着指针p所指向的数值改变了,变量a的数值也改变了,这是因为指针p指向的就是变量a的内存地址。

可以理解为,当指针指向某个变量的内存地址的时候,这个指针和这个变量,已经关联上了。

改变指针或者变量的数值,另外一方的数据也会随之改变。这是因为他们共享了同一个内存地址

2.3

同样的我们可以对指针进行自增自减操作:

int a=1;
int *p;
p =&a;
printf("%d\n",*p);
*p++;
printf("%d\n",*p);

1.初始化变量,指针,以及把指针指向a

int a = 1;

int *p;

p = &a;

2.打印指针指向的值,1

printf("%d\n", *p);

3.指针指向的值自增

*p++;

4.打印指针指向的值,2

printf("%d\n", *p);

从运算符优先级来说,*&都是高于自增自减符号的,所以*p++是先指针,再自增

2.4

又如:

int b=1;
int *p;
p=&b;
printf("%d\n",*p);
*p--;
printf("%d\n",*p);

输出结果为

1

2.5

除了四则运算以外,比较运算逻辑运算也是一样的。

我们在写代码的时候只需要记住指针一旦指向了某个变量,他们之间就关联上了,或者说等价了。

对于指针的应用我们需要记住的是,一旦某个指针指向了变量,这时候这个指针就和这个变量关联上了。

对这个指针进行数据赋值和修改,就等同于对这个变量进行数据的赋值和修改,反之亦然

3.易错点

指针p指向的是变量a的内存地址。

&取地址运算符

*指针运算符,能够获取内存地址中存储的值。

4.思维导图

最后我想说的是:

 在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JAVA】关于抽象类的概念

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 在Java中,抽象类是一种特殊的类,它无法被实例化。它只能被用作其他类的基类,以便子类可以继承它的属性和方法。今天我们就来谈谈JAVA中的抽象类。…

爬虫 — App 爬虫(一)

目录 一、介绍二、APP 爬虫常见反爬三、APP 抓包常用工具四、模拟器五、安装 APP1、下载 APP2、安装 APP 六、fiddler1、工作原理2、安装3、基本介绍 七、环境配置1、fiddler 的配置2、夜神模拟器的配置 八、案例 一、介绍 爬虫分类——数据来源 1、PC 端爬虫(网页…

IP风险查询:抵御DDoS攻击和CC攻击的关键一步

随着互联网的普及,网络攻击变得越来越普遍和复杂,对企业和个人的网络安全构成了重大威胁。其中,DDoS(分布式拒绝服务)攻击和CC(网络连接)攻击是两种常见且具有破坏性的攻击类型,它们…

十、阶段实践练习

阶段实践练习 1.阶段实践练习1.1.练习1~~~~象棋口诀1.2.练习2~~~~输出汇款单1.3.练习3~~~~输出个人信息1.4.练习4~~~~计算月收入1.5.练习5~~~~计算商和余数1.6.练习6~~~~判断成绩能否及格1.7.练习7~~~~话费充值1.8.练习8~~~~货车装西瓜 ———————————————————…

一百八十一、Hive——海豚调度HiveSQL任务时当Hive的计算引擎是mr或spark时脚本的区别(踩坑,附截图)

一、目的 当Hive的计算引擎是spark或mr时,发现海豚调度HQL任务的脚本并不同,mr更简洁 二、Hive的计算引擎是Spark时 (一)海豚调度脚本 #! /bin/bash source /etc/profile nowdatedate --date0 days ago "%Y%m%d" y…

[Git入门]---gitee注册及代码提交

文章目录 1.Gitee是什么2.gitee注册3.git工具及图形化界面工具安装4.gitee仓库创建5.进行本地仓库与远端gitee仓库的链接6.git三板斧addcommitpush 7.gitee提交代码常见问题 1.Gitee是什么 gitee是基于git代码托管和研发协作的国内平台,在上面可以托管个人或公司代…

XSS-labs1-20关通过手册

目录 XSSlabs1-20关通关手册第一关level-1(无任何过滤)第二关level-2(闭合标签)第三关level-3(单引号闭合js事件函数绕过)第四关level-4(双引号闭合js事件函数绕过)第五关level-5&am…

Excel 拆分单元格数据(公式拆分、智能填充、分列)

将姓名工号拆分成 姓名 和 工号 方法1 在 B2 单元格输入 LEFT($A2, FIND(":", $A2) - 1)在 C2 单元格输入 RIGHT($A2, LEN($A2) - FIND(":", $A2))然后 ctrl d 向下填充即可 方法2 在 B2 单元格输入 李金秀,然后选中 B3 单元格&#xff0c…

LeetCode 753. 破解保险箱【欧拉回路,DFS】困难

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

实现AIGC更好的数据存力,这家科技巨头为我们指明了方向

存力即数据存储能力 蕴藏着巨大的发展机会 【全球存储观察 | 热点关注】 2023年,全球被ChatGPT的热潮席卷,拥抱AIGC的创新赛道成为众多企业的新选择。 全球存储观察分析指出,影响AIGC发展的三大因素也日益凸显,即算…

ROS之创建第一个程序

打开终端 创建工作空间 mkdir ros_ws进入工作空间 cd ros_ws创建src文件夹(放源程序) mkdir src编译工作空间 catkin_make打开vscode(从终端打开此工程) code .进入src文件夹 cd src创建功能包demo1,并加载依赖…

[Linux入门]---Linux编译器gcc/g++使用

文章目录 1.背景知识2.gcc如何完成编译运行工作预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)链接(生成可执行文件) 3.函数库动态库静态库动静态库的区别 4.gcc选项 1.…

一键自助建站系统源码带安装教程 傻瓜式部署搭建,让您的建站更高效

在这个数字时代,网站已成为企业或个人展示形象、推广业务的重要工具。为了满足这一需求,许多自助建站系统应运而生,大大降低了用户建站的门槛。给大家分享一款傻瓜式部署搭建的一键自助建站系统源码,让您轻松拥有高效建站能力。 …

虹科教您 | 可实现带宽计量和延迟计算的时间敏感网络测试工具RELY-TSN-LAB操作指南与基本功能测试

1. RELY-TSN-LAB产品概述 时间敏感网络(TSN)能够合并OT和IT世界,这将是真正确保互操作性和标准化的创新性技术。这项技术的有效开发将显著降低设备成本、维护、先进分析服务的无缝集成以及减少对单个供应商的依赖。为了在这些网络中实现确定性,需要控制…

[LLM+AIGC] 01.应用篇之中文ChatGPT初探及利用ChatGPT润色论文对比浅析(文心一言 | 讯飞星火)

近年来,人工智能技术火热发展,尤其是OpenAI在2022年11月30日发布ChatGPT聊天机器人程序,其使用了Transformer神经网络架构(GPT-3.5),能够基于在预训练阶段所见的模式、统计规律和知识来生成回答&#xff0c…

【Linux操作系统实战】Linux基础命令面试必备(二)

😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想…

【rabbitMQ】-延迟队列-模拟控制智能家居的操作指令

这个需求为控制智能家居工作,把控制智能家居的操作指令发到队列中,比如:扫地机、洗衣机到指定时间工作 一.什么是延迟队列? 延迟队列存储的对象是对应的延迟消息,所谓“延迟消息” 是指当消息被发送以后,并…

数据中心中什么最重要?

在数据中心中,最重要的要素可以总结为以下几点: 数据安全:数据中心是存储和处理大量敏感数据的关键设施,因此数据安全是最重要的要素之一。数据中心必须采取严格的物理安全措施,如门禁、监控和防火措施,以确…

Stable Diffusion基础:精准控制之ControlNet

在AI绘画中精确控制图片的生成是一件比较困难的事情,炼丹师们经常需要大量抽卡才能得到一张满意的图片,不过随着 ControlNet 的诞生,这一问题得到了很大的缓解。 ControlNet 提供了十几种控制网络模型,有的可以控制画面的结构&…

利用大模型知识图谱技术,告别繁重文案,实现非结构化数据高效管理

我,作为一名产品经理,对文案工作可以说是又爱又恨,爱的是文档作为嘴替,可以事事展开揉碎讲清道明;恨的是只有一个脑子一双手,想一边澄清需求一边推广宣传一边发布版本一边申报认证实在是分身乏术&#xff0…