11-数组与指针深入理解——题型理解

11-数组与指针深入理解——题型理解

文章目录

  • 11-数组与指针深入理解——题型理解
    • 一、理解题1
    • 二、理解题二
    • 三、理解题三
    • 四、理解题四
    • 五、理解题五
    • 六、理解题六

一、理解题1

#include <stdio.h>int main(void)
{int (*p)[5] = NULL; // 定义一个指向 拥有5个整型数据的数组int arr[5] = {1,2,4,5,7};p = &arr; //指向arr数组的首地址(整个数组的首地址)printf("arr    = %p\n",arr );    printf("&arr   = %p\n",&arr );    printf("p      = %p\n",p);        printf("*p     = %p\n",*p );      printf("p+1    = %p\n",p+1 );    printf("(*p)+1 = %p\n",(*p)+1);  printf("(**p = %p\n",**p);  int a;//a是一个随机数printf("%p\n%p\n",a,&a );return 0;
}

输出:
在这里插入图片描述

二、理解题二

#include <stdio.h>int main(void)
{int a[5] = {1,2,3,4,5};int b[3][4] = { {250,2,3,4}, {5,6,7,8}, {9,10,11,12}};printf("&a: %p\n",&a);  //数组的首地址     printf("&a+1:   %p\n",&a+1);     //数组的地址+1 加一整个数组的大小 这里是加20Bprintf("a:  %p\n",a); //首元素首地址           printf("a+1:    %p\n",a+1);  //第二个元素的地址printf("\n");printf("&b: %p\n",&b);  //数组的首地址     printf("&b+1:   %p\n",&b+1);//数组的地址+1 加整个二维数组的大小     printf("\n");printf("b:  %p\n",b); //二维数组中第一个元素的地址b[0][0]的地址 但是其实表示的是第一个元素(250,2,3,4)的地址    printf("b+1:    %p\n",b+1);//由上面的b的解析可知,这里加一应该是加一个元素(250,2,3,4)的地址   ,所以是{5,6,7,8}的首地址printf("\n");printf("*b: %p\n",*b);  //因为b指的是(250,2,3,4)的地址,所以*b指的是250的地址   printf("*b+1:   %p\n",*b+1);  //由上面的解析可知,*b+1 应该是增加一个“250 ”类型的地址,也就是增加一个整型的地址   printf("\n");printf("**b:    %d\n",**b); // *b 是 250的地址,**b则是250的值  printf("**b+1:  %d\n",**b+1); //**b是数值250,然后在这个值上+1 ,所以为2 与原数组第二个元素无关  printf("**(b+1):%d\n",**(b+2)); // b+2是增加两个元素的地址,也就是{9,10,11,12}的地址,*(b+2)是这9的地址,**()就是取出这个9 的值 printf("*(*(b+2)+2):%d\n",*(*(b+2)+2));  //b+2是{9,10,11,12}的地址,*(b+2)是9的地址,*(b+2)+2 是在9的地址的基础上加两个int型的地址也就是11的地址,然后*()就是取出11的值// 使用指针来访问二维数组的每一个元素for (size_t i = 0; i < 12; i++){printf("%d\t" ,*((*b)+i) );}// 使用数组来访问二维数组for (size_t i = 0; i < 3 ; i++){for (size_t j = 0; j < 4; j++){printf("b[%d][%d]:%d\t" , i , j , b[i][j] );}}// *((*b)+i)return 0;
}

输出:
在这里插入图片描述

三、理解题三

#include <stdio.h>int main(void)
{int arr[] = { 1, 3, 5, 7, 9};int i, *p = arr, len = sizeof(arr) / sizeof(int);for(i=0; i<len; i++){//   * 和 ++ 得优先级是同级的 , 又因为当前这一级的结合性是从右往左 , 因此先 p++  , 但是是后缀所以先运算后++printf("%d\n", *p++ );   // 先运算得到 1  , 然后再地址+1 printf("%d\n", (*p)++ );  // 先得到p得内容  3 , 然后再对3进行自加for (size_t j = 0; j < len ; j++){printf("arr[%d]:%d\t" , j , arr[j]);} printf("\n");}printf("\n");return 0;
}

输出
在这里插入图片描述

四、理解题四


#include <stdio.h>int main(void)
{int a = 1, b = 2, c = 3;int *arr[3] = {&a, &b, &c};//定义一个名字为arr的数组,数组中存放的是int 型指针,--> 整型指针数组int **parr = arr; // 第一部分 *p , 第二部分 int * 说明类型   为指针类型   +1 则+1个指针类型 8字节(64)//            arr[0]  --> &a   *&a --> a printf("%d, %d, %d\n", *arr[0], *arr[1], *arr[2]);printf("%d, %d, %d\n", **(parr+0), **(parr+1), **(parr+2));return 0;
}

五、理解题五

#include <stdio.h>int main(void)
{char *lines[5] =       //字符指针数组--> 创建一个名字为lines的数组,用来存放char * 指针{"COSC1283/1984","Programming","Techniques","is","great fun"};char *str1 = lines[1];  //   用来存放数组第一个元素的首元素的首地址    --》Programmingchar *str2 = *(lines + 3); //==>*lines[3]  输出 ischar c1    = *(*(lines + 4) + 6);  //*(lines + 4)-->"great fun"的地址 +6 就是 字符 f 的地址 再取值char c2    = (*lines + 5)[5]; //*lines  --> "COSC1283/1984"中的C的地址,+5 得到2的地址, [5]--》以2为基础再往后+5个单位并取值为9char c3    = *lines[0] + 2;//先lines[0]得到C的地址,*则取值为C,+ 2 --》 C+ 2 = Eprintf("str1 = %s\n", str1);   printf("str2 = %s\n", str2);   printf("c1   = %c\n", c1);     printf("c2   = %c\n", c2);    printf("c3   = %c\n", c3);    return 0;
}

在这里插入图片描述

六、理解题六

#include <stdio.h>int main(void)
{int i;int num;int (*p)[5] = NULL;  //数组指针   int arr[5] =  {5,2,4,5,7};p = &arr;printf("=====================================\n");num = sizeof(arr)/sizeof(arr[0]);for(i=0;i<num;i++){printf("*p[%d] = %d\n",i,*p[i]);//根据优先级应该是先p[i]然后再取值。P是一个数组指针,它的类型是数组,+1是增加一个数组,所以输出只有第一个是正常的,后面的都越界了。}printf("=====================================\n");for(i=0;i<num;i++){printf("*(p+%d) = %p\n",i,*(p+i));  //打印👆的地址,同理p为一个数组指针,+i 是增加一个数组的大小也就是五个整型,20个字节} printf("=====================================\n");for(i=0;i<num;i++){printf("p[%d] = %p\n",i,p[i]); // == *(p+i)  和前面的一样  }printf("=====================================\n");for(i=0;i<num;i++){printf("(*p)[%d] = %d\n",i,(*p)[i]); //正确输出,先*p 得到首元素地址,首元素首地址[i],以首元素的地址为基准值进行单位的增加}return 0;
}

输出:
在这里插入图片描述

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

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

相关文章

使用 TinyEngine 低代码引擎实现三方物料集成

本文由体验技术团队 TinyEngine 项目成员炽凌创作&#xff0c;欢迎大家实操体验&#xff0c;本体验内容基于 TinyEngine 低代码引擎提供的环境&#xff0c;介绍了如何通过 TinyEngine 低代码引擎实现三方物料集成&#xff0c;帮助开发者快速开发。 知识背景 1.1 TinyEngine 低…

读书笔记-《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化&#xff0c;从架构上颠覆了原有的网络管理&#xff0c;所以SDN的架构安全就是首先要解决的问题。例如&#xff0c;SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

Spring Boot整合WebSocket和Redis实现直播间在线人数统计功能

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

无人机电机选型

2306的意思是电机定子直径23MM&#xff0c;定子高度6MM.在相同KV值的情况下电机的定子体积越大&#xff0c;扭矩越大&#xff1a;KV的意思是每增加1V的电压电机转速增加多少。同参数的电机KV越低&#xff0c;在低速的情况下能带动更大的质量。这也就解释了竞速机选用更高KV值的…

linux中dd命令以及如何测试读写速度

dd命令详解 dd命令是一个在Unix和类Unix系统中非常常用的命令行工具&#xff0c;它主要用于复制文件和转换文件数据。下面我会详细介绍一些dd命令的常见用法和功能&#xff1a; 基本语法 dd命令的基本语法如下&#xff1a; bash Copy Code dd [option]...主要选项和参数 if…

【机器学习】深度探索:从基础概念到深度学习关键技术的全面解析——梯度下降、激活函数、正则化与批量归一化

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、机器学习的基本概念与原理二、深度学习与机器学习的关系2.1 概念层次的关系2.2 技术特点差异2.3 机器学习示例&#xff1a;线性回归&#xff08;使用Python和scikit-learn库&#xff09;2.4 深度学习示例&#xff1a;简…

武汉理工大学 云计算与服务计算 期末复习

云计算与的定义 长定义是&#xff1a;“云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上&#xff0c;使各种应用系统能够根据需要获取计算力、存储空间和信息服务。” 短定义是&#xff1a;“云计算是通过网络按需提供可动态伸缩的廉价计算服务。 云计…

计算机网络 —— 网络层(IP数据报)

计算机网络 —— 网络层&#xff08;IP数据报&#xff09; 网络层要满足的功能IP数据报IP数据报格式IP数据报首部格式数据部分 IP数据报分片 我们今天进入网络层的学习。 网络层要满足的功能 网络层作为OSI模型中的第三层&#xff0c;是计算机网络体系结构的关键组成部分&…

ubuntu 用户名及密码忘记操作

1、重启系统&#xff0c;长按Shift键&#xff0c;直到出现菜单&#xff0c;选则高级设置。选择recovery mode&#xff0c;即恢复模式 2、选择root 3、# 后面敲入 sudo passwd 用户名 4、# passwd "用户名" 之后再敲两次密码就可以了。(如果提示修改失败可先执行&a…

汇编:宏的使用

汇编语言中的宏是用于定义可重复使用的代码块或指令集合的强大工具。宏通过简化代码编写和提高可读性&#xff0c;使得编写和维护汇编程序更加方便&#xff1b;在 MASM&#xff08;Microsoft Macro Assembler&#xff09;中&#xff0c;宏的定义和使用非常常见。以下是对汇编语…

【机器学习】机器学习与医疗健康在智能诊疗中的融合应用与性能优化新探索

文章目录 引言机器学习与医疗健康的基本概念机器学习概述监督学习无监督学习强化学习 医疗健康概述疾病预测诊断辅助个性化治疗方案制定 机器学习与医疗健康的融合应用实时健康监测数据预处理特征工程 疾病预测与优化模型训练模型评估 诊断辅助与优化深度学习应用 个性化治疗方…

(UE4.26)UE4的FArchive序列化入门

前言 序列化(Serialize)和反序列化(UnSerialize)是程序领域常见的概念。对于这两个词汇我理解的是 序列化(Serialize): 变量值(int, float, string等基本类型, 或者Array&#xff0c;Map&#xff0c;或者更复杂的复合体)存储为一个文件(二进制流, 二进制文件, json, xml等格式…

编程规范-代码检测-格式化-规范化提交

适用于vue项目的编程规范 – 在多人开发时统一编程规范至关重要 1、代码检测 --Eslint Eslint&#xff1a;一个插件化的 javascript 代码检测工具 在 .eslintrc.js 文件中进行配置 // ESLint 配置文件遵循 commonJS 的导出规则&#xff0c;所导出的对象就是 ESLint 的配置对…

Python数据分析I

目录 注&#xff1a;简单起见&#xff0c;下文中"df"均写为"表名"&#xff0c;"函数"均写为"HS"&#xff0c;"属性"均写为"SX"&#xff0c;"范围"均写为"FW"。 1.数据分析常用开源库 注释…

【国产NI替代】SMU 源测量仪:源测量单元平台主要用于半导体、传感器、模组等 IVR 测试测量

• 集 5 台仪器 (数字万用表、电压源、电流源、电子负载和脉冲发生器) 功能于⼀体 • 典型输出源及测量精度 02%&#xff0c;支持直流/脉冲输出模式 • 脉冲输出模式&#xff0c;最⼩脉冲宽度 100 us &#xff0c;上升时间 10 us • 具有 pA 级分辨率高精度源&#xff0c;且…

融云:应用出海新增长引擎,GPT-4o 后的 AI 创新与用户运营

近日&#xff0c;融云与 TikTok、维卓联合在京举办了“十年出海&#xff0c;遇上 AI”私享会。 会上&#xff0c;融云解决方案架构师于洪达带来了《应用出海新增长引擎&#xff0c;AI 创新与用户精细化运营》主题分享&#xff0c;探讨在 AI 技术大潮下应用出海通过创新运营方式…

Java基础——数组Array

系列文章目录 文章目录 系列文章目录前言一、数组基本概念二、一维数组三、数组的模型四、数组对象的创建五、元素为引用数据类型的数组 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网…

linux业务代码性能优化点

planning优化的一些改动----------> 减少值传递&#xff0c;多用引用来传递 <---------- // ----------> 减少值传递&#xff0c;多用引用来传递 <---------- // 例1&#xff1a; class A{}; std::vector<A> v; // for(auto elem : v) {} // 不建议&#xff…

flink读取hive写入http接口

目录 0、创建hive数据 1、pom.xml 2、flink代码 3、sink 4、提交任务jar 5、flink-conf.yaml 6、数据接收 flink-1.17.2jdk1.8hive-3.1.3hadoop3.3.6passwordhttp0、创建hive数据 /cluster/hive/bin/beeline !connect jdbc:hive2://ip:10000 create database demo; d…

【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南

文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…