C 语言指针
C 语言指针
在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。
指针是 C和C ++ 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。
C 语言地址
如果程序中有变量var,则&var将在内存中提供其地址。
使用scanf()函数时,我们已多次使用地址。
scanf("%d", &var);
在此,用户输入的值存储在var变量的地址中。让我们举一个可行的实例。
#include <stdio.h>
int main()
{int var = 5;printf("var: %d\n", var);// 注意在var之前使用&printf("address of var: %p", &var); return 0;
}
输出结果
var: 5
var地址: 2686778
**注意:**运行上面的代码时,您可能会获得其他地址。
C 语言指针
指针(指针变量)是用于存储地址而非值的特殊变量。
指针语法
这是我们如何声明指针的方法。
int* p;c
在这里,我们已经声明了一个int类型的指针p。
您也可以通过以下方式声明指针。
int *p1;
int * p2;
让我们再举一个声明指针的实例。
int* p1, p2;
在这里,我们声明了一个指针p1和一个普通变量p2。
给指针分配地址
让我们举个实例。
int* pc, c;
c = 5;
pc = &c;
在此,将5分配给c变量。并且,将c的地址分配给pc指针。
获取指针所指向的值
为了获得指针所指向的内容的值,我们使用了解引用运算符(*)。例如:
int* pc, c;
c = 5;
pc = &c;
printf("%d", *pc); // 输出: 5
此处,c的地址已分配给pc指针。为了获取存储在该地址中的值,我们使用了*pc。
改变指针指向的值
让我们举个实例。
int* pc, c;
c = 5;
pc = &c;
c = 1;
printf("%d", c); // 输出: 1
printf("%d", *pc); // 输出: 1
我们已经将c地址分配给了pc指针。
然后,我们将的值更改c为1。由于pc和的地址c相同,因此*pc得到1。
让我们再举一个实例。
int* pc, c;
c = 5;
pc = &c;
*pc = 1;
printf("%d", *pc); // 输出: 1
printf("%d", c); // 输出: 1
我们已经将c地址分配给了pc指针。
然后,我们使用* pc = 1;将* pc更改为1。 由于pc和c的地址相同,因此c等于1。
让我们再举一个实例。
int* pc, c, d;
c = 5;
d = -15;pc = &c; printf("%d", *pc); // 输出: 5
pc = &d; printf("%d", *pc); // 输出: -15
最初,使用的地址c分配给pc指针pc = &c;。因为c是5,所以*pc给我们5。
然后,使用将地址d分配给pc指针pc = &d;。由于d是-15,所以*pc给我们-15。
示例:指针的工作方式
让我们举一个可行的实例。
#include <stdio.h>
int main()
{int* pc, c;c = 22;printf("c的地址: %p\n", &c);printf("c的值: %d\n\n", c); // 22pc = &c;printf("指针pc地址: %p\n", pc);printf("指针pc内容: %d\n\n", *pc); // 22c = 11;printf("指针pc地址: %p\n", pc);printf("指针pc内容: %d\n\n", *pc); // 11*pc = 2;printf("c的地址: %p\n", &c);printf("c的值: %d\n\n", c); // 2return 0;
}
输出结果
c的地址: 003FFBF8
c的值: 22指针pc地址: 003FFBF8
指针pc内容: 22指针pc地址: 003FFBF8
指针pc内容: 11c的地址: 003FFBF8
c的值: 2
该程序的用法
-
int* pc, c;
这里创建了一个指针pc和一个普通变量c,都是int类型。由于pc和c没有初始化在最初,指针pc指向没有地址或一个随机地址。变量c有一个地址,但包含随机的垃圾值。 -
c = 22;
这是给变量c赋值22,也就是说,22被存储在变量c的内存中。 -
pc = &c;
这将变量c的地址分配给指针pc。 -
c = 11;
这将11分配给变量c。 -
*pc = 2;
这会将指针pc指向的内存位置的值更改为2。
使用指针时的常见错误
假设您希望指针pc指向c的地址。 然后,
int c, *pc;//pc是地址,但c不是
pc = c; // Error//&c是地址,但* pc不是
*pc = &c; // Error//&c和pc都是地址
pc = &c;//c和*pc值
*pc = c;
这是指针语法初学者经常会感到困惑的示例。
#include <stdio.h>
int main() {int c = 5;int *p = &c;printf("%d", *p); // 5return 0;
}
使用时为什么没有出现错误int *p = &c;?
这是因为
int *p = &c;
相当于
int *p:
p = &c;
在这两种情况下,我们都创建了一个指针p(不是*p)并给它赋值&c。
为了避免这种混乱,我们可以使用如下语句:
int* p = &c;
现在您知道了什么是指针,您将在下一个教程中学习指针与数组的关系。
相关文章:

C 语言指针
C 语言指针 在本教程中,您将学习指针。什么是指针,如何使用它们以及在示例的帮助下使用它们时可能遇到的常见错误。 指针是 C和C 编程的强大功能。在学习指针之前,让我们学习一下C语言编程中的地址。 C 语言地址 如果程序中有变量var&am…...

学【Java多态】-- 写高质量代码
多态的实现条件 在java中要实现,必须要满足如下几个条件,缺一不可。 1.必须在继承体系下2.子类必须要对父类中的方法进行重写3.通过父类的引用调用冲写的方法。 想要真正的学好多态需要去学习一些前置知识,那我们直接开始吧! …...

【汇编】内存的读写与地址空间、寄存器及数据存储
文章目录 前言一、CPU对存储器的读写1.1 cpu对存储器的读写如何进行?1.2 演示 二、内存地址空间三、将各类存储器看作一个逻辑存储器——统一编址内存地址空间的分配方案 三、CPU的组成寄存器是CPU内部的信息存储单元通用寄存器--AX为例“横看成岭侧成峰“ 四、“字…...

DSP生成hex方法
以下使用两种方法生成的HEX文件,亲测可用 (1)万能法 不管.out文件是哪个版本CCS编译器生成的,只要用HEX2000.exe软件,翻译都可以使用。方法: hex2000 -romwidth 16 -memwidth 16 -i -o 20170817chuankou…...

GZ038 物联网应用开发赛题第7套
2023年全国职业院校技能大赛 高职组 物联网应用开发 任 务 书 (第7套卷) 工位号:______________ 第一部分 竞赛须知 一、竞赛要求 1、正确使用工具,操作安全规范; 2、竞赛过程中如有异议,可向现场考评…...

ELK之Logstash解析时间相差8h的问题
一、问题描述 服务器当前时间为:2022年 06月 28日 星期二 11:24:22 CST 而logstash解析的时间为2022-06-28T03:15:25.545Z与实际时间相差8h 一、解决办法: 需改logstash的配置文件: 原理就是:定义一个中间变量timestamp&…...

uniapp+vite+vue3开发跨平台app,运行到安卓模拟器调试方法
因为没有使用hbuilder开发uniapp,而是使用了vscode和vite来开发的,所以怎么将这个程序运行到安卓模拟器调试开发呢?其实方法很简单,使用android studio创建一个模拟器或者其他mumu模拟器,然后将项目使用hbuilder打开&a…...

Ubuntu诞生已经19年了
导读2004 年 10 月 20 日,Ubuntu 4.10 正式发布,代号‘Warty Warthog’。 2004 年 10 月 20 日,Ubuntu 4.10 正式发布,代号‘Warty Warthog’。 ▲ Ubuntu 4.10 与最新版 Ubuntu 23.10 的对比 作为 Ubuntu 第一个版本࿰…...

跟着基金买,别墅靠大海?买基金重仓股票,会破产吗?| 附最新选股结果
2020年A股经历了一波结构性牛市。 抱团核心资产的公募基金历史性大赚2万亿,一跃成为全市场顶流。不仅常年霸榜热搜,甚至连游戏直播的弹幕都在讨论基金。 很多年轻人也纷纷跑步入场,毕竟支付宝买基金贼方便。 可惜好景不长,大盘急…...

【教3妹学编辑-mysql】mybatis查询条件遇到的坑及解决方案
2哥 :3妹,今天怎么下班这么晚啊。 3妹:嗨,别提了,今天线上出bug了, 排查了好久。 2哥:啊,什么问题呀? 3妹:我们内部的一个管理系统报错了, 最近排查下来是myb…...

032-从零搭建微服务-定时服务(一)
写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):mingyue: 🎉 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…...
精通Nginx(11)-缓存
缓存能够存储请求的响应结果,以供未来再次使用,进而加速内容的提供。内容缓存可以缓存完整的响应,减少上游服务器的负载,避免了每次都为相同的请求重新运行计算和查询的麻烦。缓存可以提高性能并减少负载,这意味着可以用更少的资源更快地提供服务。NGINX 允许在NGINX 服务…...

用excel计算矩阵的乘积
例如,我们要计算两个矩阵的乘积, 第一个矩阵是2*2的: 1234 第2个矩阵是2*3的: 5697810 在excel中鼠标点到其它空白的地方,用来存放矩阵相乘的结果: 选择插入-》函数: 选中MMULT,…...
【微软技术栈】C#.NET 中使用依赖注入
本文内容 先决条件创建新的控制台应用程序添加接口添加默认实现添加需要 DI 的服务为 DI 注册服务结束语 本文介绍如何在 .NET 中使用依赖注入 (DI)。 借助 Microsoft 扩展,可通过添加服务并在 IServiceCollection 中配置这些服务来管理 DI。 IHost 接口会公开 IS…...

开启学历新征程,电大搜题助您轻松获取知识
作为一名电大学者,有肩负着传递真实信息、宣传正面价值的使命,而今天我要向您介绍的是一款非常实用的学习工具——电大搜题微信公众号。通过该平台,您可以获得更多关于浙江开放大学和广播电视大学的学习资源,助您在学习和工作上取…...

Redis 安装
前言 为什么需要学习如何安装Redis? 学习如何安装Redis对于软件开发人员来说是非常重要的,这是因为: 高效数据存储:Redis是一种高性能的键值存储系统,能够快速地存储和检索数据。学会安装Redis可以让开发人员和系统管…...
Windows GitBash解决Github添加密钥时提示Key is already in use的问题
通过添加多密钥实现 ssh-agent bashssh-keygen -t rsa -C ‘xx1’ -f ~/.ssh/id_rsa_xx1ssh-keygen -t rsa -C ‘xx2’ -f ~/.ssh/id_rsa_xx2ssh-add id_rsa_xx1ssh-add id_rsa_xx2 vim ~/.ssh/config Host github_xx1HostName github.comUser gitIdentityFile ~/.ssh/id_rs…...

第1关:简单查询
任务描述相关知识 检索数据表的内容编程要求测试说明 任务描述 本关任务: 用 SELECT 语句检索数据表中指定字段的数据; 用 SELECT 语句检索数据表中所有字段的数据。 相关知识 为了完成本关任务,你需要掌握:1.如何获取数据表…...
Android设计模式--Builder建造者模式
一,定义 Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。 也就是将一个对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 二&…...

css实现鼠标悬停时元素的显示与隐藏
css实现鼠标悬停时元素的显示与隐藏 跟着B站黑马学习小兔鲜项目,有个点记录一下 就是当鼠标悬浮在商品列表上时,列表中的商品会显示出来,离开时,商品隐藏,如下: 感觉这个功能经常会遇到,但一直…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...