数组与指针声明小问题

1、int *p = &a; 是 C 语言中的一条语句,它涉及指针的声明和初始化。让我们逐步解释这一行代码的含义:

  1. int *p:这是一个指针声明。它声明了一个名为 p 的变量,该变量是一个指向 int 类型数据的指针。

  2. &a:这是取地址运算符。它返回变量 a 的地址。假设 a 是一个 int 类型的变量,那么 &a 的类型就是 int*(指向 int 的指针)。

  3. =:这是赋值运算符。它将右侧的值(在这个例子中是 &a,即 a 的地址)赋值给左侧的变量(即 p)。

综合起来,这行代码的意思是:声明一个指向 int 类型的指针 p,并将 p 初始化为 a 的地址。换句话说,p 将存储 a 的内存地址,因此 p 指向 a

示例代码

下面是一个完整的示例,演示如何使用 int *p = &a; 来访问和修改 a 的值:

#include <stdio.h>
​
int main(void) {int a = 10; // 声明并初始化一个整型变量 aint *p = &a; // 声明一个指针 p 并将其初始化为 a 的地址
​printf("a 的初始值: %d\n", a);printf("通过指针 p 访问 a 的值: %d\n", *p);
​// 通过指针 p 修改 a 的值*p = 20;printf("修改后 a 的值: %d\n", a);
​return 0;
}

输出

a 的初始值: 10
通过指针 p 访问 a 的值: 10
修改后 a 的值: 20

解释

  1. 声明和初始化

    • int a = 10; 声明并初始化一个整型变量 a,其值为 10。

    • int *p = &a; 声明一个指针 p,并将 p 初始化为 a 的地址。

  2. 访问值

    • *p 表示访问 p 指向的变量的值,即 a 的值。

    • printf("通过指针 p 访问 a 的值: %d\n", *p); 输出 a 的值,通过指针 p 访问。

  3. 修改值

    • *p = 20; 通过指针 p 修改 a 的值为 20。

    • printf("修改后 a 的值: %d\n", a); 输出修改后的 a 的值。

这个示例展示了如何使用指针来访问和修改变量的值,以及 int *p = &a; 语句的实际含义和应用。

2、int arr[50]; int *p = &arr;,这一行代码会引发编译错误,因为 &arr 的类型是 int (*)[50](指向一个包含 50 个 int 的数组的指针),而 p 的类型是 int*。要正确地初始化指向数组的指针,应该使用 int *p = arr;int *p = &arr[0];

正确的初始化方式:

#include <stdio.h>
​
int main(void) {int arr[50];  // 声明一个包含50个整数的数组int *p = arr; // 初始化指针p,使其指向数组arr的第一个元素
​// 也可以这样写:// int *p = &arr[0];
​// 示例:通过指针访问和修改数组元素for (int i = 0; i < 50; i++) {arr[i] = i; // 初始化数组元素}
​// 打印数组元素for (int i = 0; i < 50; i++) {printf("arr[%d] = %d, *(p + %d) = %d\n", i, arr[i], i, *(p + i));}
​return 0;
}

代码解释:

  1. 声明数组

    • int arr[50]; 声明一个包含 50 个整数的数组。

  2. 初始化指针

    • int *p = arr;int *p = &arr[0]; 都是有效的,表示指针 p 指向数组 arr 的第一个元素。

  3. 访问和修改数组元素

    • 通过指针 p 访问和修改数组元素,使用 *(p + i) 的方式,这是指针运算的一种形式,等同于 arr[i]

示例输出:

这个代码片段初始化数组元素为其索引值,然后打印每个元素。输出示例如下:

arr[0] = 0, *(p + 0) = 0
arr[1] = 1, *(p + 1) = 1
arr[2] = 2, *(p + 2) = 2
...
arr[49] = 49, *(p + 49) = 49

总结:

在 C 语言中,指针和数组之间的关系非常紧密。int *p = arr; 是一种将指针 p 指向数组 arr 的第一个元素的常见且正确的方式,而 int *p = &arr; 则是不正确的,因为 &arr 的类型不匹配指针 p 的类型。通过正确初始化指针,可以方便地使用指针进行数组元素的访问和修改。

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

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

相关文章

动态规划-似包非包问题

组合总和 Ⅳ&#xff08;377&#xff09; 题目描述&#xff1a; 状态表示&#xff1a; 我们看到这题发现有一个限制条件就是目标整数target并且此时数组中的数字是可以重复选择的&#xff0c;这时候不难联想到前面学习的完全背包问题&#xff0c;这题好像符合完全背包问题的…

关于linux磁盘告警问题

案例&#xff1a;我们在执行df命令时&#xff0c;查看到磁盘利用率很高&#xff0c;但是到相对应的目录执行du -sh *来找大文件时进行删除时&#xff0c;发现各个目录相加并不大&#xff0c;如下图&#xff1a; 使用df命令查看到根(/)目录使用到33G&#xff0c;而du命令显示只使…

vscode终端命令行前面出现两个conda环境名的问题决解方法

已经安装了conda&#xff0c;打开vscode的terminal时&#xff0c;命令行前面有两个虚拟环境名。 进入vscode的setting 找到Python->Python:Default Interpreter Path&#xff0c;把这个值复位&#xff0c;就可以解决。 如果不想前面带(base)&#xff0c;可以运行 conda co…

FLIP动画思想

Aerotwist - FLIP Your Animations 还可以用gsap动画库的FLIP插件 Flip | GSAP | Docs & Learning // Get the first position. var first el.getBoundingClientRect();// Now set the element to the last position. el.classList.add(totes-at-the-end);// Read agai…

STP简介

一、STP介绍 STP 即生成树协议&#xff08;Spanning Tree Protocol&#xff09;一种网络协议 STP 主要用于解决以太网中的环路问题。在具有冗余链路的网络环境中&#xff0c;环路可能导致广播风暴、重复帧等不良后果&#xff0c;严重影响网络性能和稳定性。STP 通过在交换机之…

FuTalk设计周刊-Vol.050

#AI漫谈 热点捕手 1.Canva 宣布收购 Affinity 创意套件 平面设计平台 Canva 于 3 月 26 日宣布收购知名设计软件 Affinity 以“迎战”Adobe&#xff0c;不过此后许多设计师开始担心原本采用“永久授权”付费方案的 Affinity 系列软件是否会转为订阅制&#xff0c;而目前 Canv…

Android Studio开发之路(十四)自定义Titlebar以及设置顶部状态栏颜色

一、描述 项目需求&#xff0c;我要做一个下图这样的titlebar,包括一个返回按钮&#xff0c;一个关闭按钮&#xff0c;一个文本框。默认的titlebar按钮设计不太满足我的需求&#xff0c;于是我打算自定义一个titlebar组件&#xff0c;应用到我的每一个页面 二、titlebar组件设…

【NumPy】关于numpy.searchsorted()函数,看这一篇文章就够了

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

【Qt】数据库(一)SQLITE创建、增删查改

填坑1&#xff1a;如何连续插入 汇总SQlite语句 创建表格&#xff1a;create table <table_name> (f1 type1, f2 type2,…); 增&#xff1a;insert into <table_name> values (value1, value2,…); 改&#xff1a;update <table_name> set <f1value1>,…

AttributeError: module ‘google._upb._message‘ has no attribute ‘Message‘

rolling back to the stable version protobuf3.20.1 resolved the issue for me.

数据结构第二篇【关于java线性表(顺序表)的基本操作】

【关于java线性表&#xff08;顺序表&#xff09;的基本操作】 线性表是什么&#xff1f;&#x1f435;&#x1f412;&#x1f98d;顺序表的定义&#x1f9a7;&#x1f436;&#x1f435;创建顺序表新增元素,默认在数组最后新增在 pos 位置新增元素判定是否包含某个元素查找某个…

.net aot inherit object.Dispose()”: 没有找到适合的方法来重写解决方法

.net aot inherit object.Dispose()”: 没有找到适合的方法来重写解决方法<DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>

【Python爬虫】案例_百度贴吧

声明&#xff1a;案例只用于学习&#xff0c;不得恶意使用 要求&#xff1a;获取帖子的标题和链接 import requests from lxml import etreeclass Tieba(object):def __init__(self,name):self.url https://tieba.baidu.com/f?ieutf-8&kw{}.format(name)self.headers …

人形机器人建模与控制(三) - 机器人控制

L3 Robot Control Robot Control L3 Robot Control1. RepeatForward KinematicsDifferential KinematicsExternal Wrench (Force & Torque) MappingDynamicsGoal for Today2. Feedback Cancellation3. Joint Space ControlSimpler Control Laws

JDBC批量处理(addBatch/executeBatch/clearBatch)

1-操作多条的时候用批量处理&#xff0c;比单条处理效率更高 2-JDBC常用批量处理方法 &#xff08;1&#xff09;addBatch(string)&#xff1a;添加批量处理的sql语句或参数 &#xff08;2&#xff09;executeBatch&#xff1a;执行批量处理语句 &#xff08;3&#xff09;clea…

Java中IO的四大抽象类

InputStream/OutputStream和Reader/Writer类是所有IO流类的抽象父类&#xff0c;需要先简单了解一下这四个抽象类的作用。然后&#xff0c;通过它们具体的子类熟悉相关的用法。 InputStream 此抽象类是表示字节输入流的所有类的父类。InputStream是一个抽象类&#xff0c;它不…

BUG(18) : Caused by: java.lang.ClassNotFoundException

场景 导入了多个mave依赖, 启动是报java.lang.ClassNotFoundException, 报错位置为依赖包里面的子依赖 解决 什么依赖报错, pom文件直接引入该子依赖

代码随想录算法训练营第二十天 | 654.最大二叉树 、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

654.最大二叉树 题目链接&#xff1a;https://leetcode.cn/problems/maximum-binary-tree/ 文档讲解&#xff1a;https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1MG411G7ox 思路…

使用高性能NIO框架netty实现IM集群对聊方案

文章目录 前言技术积累什么是nettynetty如何实现IM如何实现IM集群 实战演示基础配置netty搭建IM集群redis发布订阅 实战测试 前言 在前面的博文中我们分享了原生websoket集群搭建&#xff0c;也用redis 发布订阅实现了集群消息正常有序分发。但是有不少同学希望风向一期netty实…

Json差异比较

json差异比较 如何比较两个json的差异 代码实现 导入依赖 <dependency><groupId>cn.xiaoandcai</groupId><artifactId>json-diff</artifactId><!-- 旧版本可能存在某些缺陷。版本请以maven仓库最版为准。 --><version>4.1.3-RC1-R…