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.mzph.cn/diannao/25075.shtml

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

相关文章

【Java】JDBC+Servlet+JSP实现搜索数据和页面数据呈现

目录 1 .功能介绍 2. 实现流程 3. 项目环境 4. 相关代码 4.1 Maven配置 4.2 SQL语句 4.3 Java代码 4.4 HTML代码 4.5 JSP代码 5. 结果展示 &#xff08;原创文章&#xff0c;转载请注明出处&#xff09; 博主是计算机专业大学生&#xff0c;不定期更新原创优质文章&…

Android 常用开源库 MMKV 源码分析与理解

文章目录 前言一、MMKV简介1.mmap2.protobuf 二、MMKV 源码详解1.MMKV初始化2.MMKV对象获取3.文件摘要的映射4.loadFromFile 从文件加载数据5.数据写入6.内存重整7.数据读取8.数据删除9.文件回写10.Protobuf 实现1.序列化2.反序列化 12.文件锁1.加锁2.解锁 13.状态同步 总结参考…

gitlabcicd-k8s部署runner

一.环境信息 存储使用nfs挂载持久化 k8s环境 helm安装 建议helm 3 二.部署gitlab-runner 1.查看gitlab版本 进入容器可通过执行&#xff1a;gitlab-rake gitlab:env:info rootgitlab-647f4bd8b4-qz2j9:/# gitlab-rake gitlab:env:info System information System: Current Us…

【面试干货】 Hash 索引和 B+树索引的区别

【面试干货】 Hash 索引和 B树索引的区别 1、Hash 索引2、B 树索引3、区别和适用场景 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在数据库中&#xff0c;索引是一种重要的数据结构&#xff0c;用于加速查询操作。常见的索引包括 Hash 索…

蓝桥杯--跑步计划

问题描述 小蓝计划在某天的日期中出现 11 时跑 55 千米&#xff0c;否则只跑 11 千米。注意日期中出现 11 不仅指年月日也指星期。 请问按照小蓝的计划&#xff0c;20232023 年小蓝总共会跑步锻炼多少千米?例如&#xff0c;55 月 11 日、11 月 1313 日、1111 月 55 日、44 月…

从零开始实现自己的串口调试助手(10) - 优化 收尾 + 打包

光标位置优化 在接收槽函数中更新光标位置: // 让光标始终在结尾 ui->textEditRev->moveCursor(QTextCursor::End); ui->textEditRev->ensureCursorVisible(); // 让光标可视化 //记得HEX显示槽函数底下也得加上这两行代码 新的接收槽函数如下: void Wid…

一维信号循环平移小波降噪方法(MATLAB R2021b)

循环平移算法由Coifman和Donoho最先提出&#xff0c;其基本原理是将信号进行循环平移&#xff0c;将平移后的信号降噪后再做逆循环平移&#xff0c;改变平移位数&#xff0c;多次重复上述运算&#xff0c;将获得的所有结果求平均&#xff0c;得到最后的结果。 在理想情况下&am…

Java面试八股之什么是自动装箱和自动拆箱

什么是自动装箱和自动拆箱 在Java中&#xff0c;自动装箱&#xff08;Autoboxing&#xff09;和自动拆箱&#xff08;Auto-unboxing&#xff09;是两个与基本数据类型和它们对应的包装类之间的转换相关的特性。这两个概念自Java 5&#xff08;也称为Java SE 5或JDK 5&#xff…

【CS.CN】深入探讨下HTTP的Connection头:通过keep-alive实现高效网络连接

文章目录 0 序言0.1 由来0.2 使用场景0.3 现在还需要吗&#xff1f; 1 Connection: keep-alive的机制2 语法 && 通过设置Connection: keep-alive优化性能3 验证与性能提升4 总结References 0 序言 0.1 由来 Connection头部字段在HTTP/1.1中被引入&#xff0c;主要用于…

老旧机子装linux——Xubuntu

目录 前言 正文 下载系统 ​编辑 制作系统盘&#xff1a; 安装界面 Xubuntu ​编辑 lubuntu 后语 前言 有两台电脑&#xff0c;一台装了Ubuntu22&#xff0c;一台装了debuntu。虽然debuntu界面与乌班图大体一样&#xff0c;但是编译器好像有点区别。由于机子为10年前的老…

React的useState的基础使用

import {useState} from react // 1.调用useState添加状态变量 // count 是新增的状态变量 // setCount 修改状态变量的方法 // 2.添加点击事件回调 // userState实现计数实例import {useState} from react// 使用组件 function App() {// 1.调用useState添加状态变量// coun…

2024年AI大模型训练数据白皮书作用

2024年AI大模型训练数据白皮书 在人工智能迅猛发展的今天&#xff0c;AI大模型的训练数据质量和管理成为影响其性能和应用效果的关键因素。《2024年AI大模型训练数据白皮书》为业内人士提供了一份详尽的指南&#xff0c;揭示了当前AI大模型训练数据的最新趋势、最佳实践以及未…

Go微服务: 基于rocketmq:server和rocketmq:broker搭建RocketMQ环境,以及生产消息和延迟消费消息的实现

RocketMQ 的搭建 1 ) 配置 docker-compose.yaml 文件 version: 3.5 services:rmqnamesrv:image: foxiswho/rocketmq:servercontainer_name: rmqnamesrvports:- 9876:9876volumes:- ./logs:/opt/logs- ./store:/opt/storenetworks:rmq:aliases:- rmqnamesrvrmqbroker:image: fo…

[HGAME 2023 week4]shellcode

看题目&#xff0c;将base64解密&#xff0c;然后dump下来&#xff0c;再拉进ida里&#xff0c;发现为tea加密 在tea加密中得到key 密文就是另外的一个文件 exp import re from ctypes import *import libnumdef decrypt(v, k):v0, v1 c_uint32(v[0]), c_uint32(v[1])delta…

【设计模式】行为型设计模式之 策略模式学习实践

介绍 策略模式&#xff08;Strategy&#xff09;&#xff0c;就是⼀个问题有多种解决⽅案&#xff0c;选择其中的⼀种使⽤&#xff0c;这种情况下我们 使⽤策略模式来实现灵活地选择&#xff0c;也能够⽅便地增加新的解决⽅案。⽐如做数学题&#xff0c;⼀个问题的 解法可能有…

如何拼接全景图?PTGui Pro macOS安装包

PTGui Pro是一款功能强大的全景图像拼接软件&#xff0c;特别适合专业摄影师和设计师使用。它能够将多张照片拼接成高质量的全景图&#xff0c;支持普通、圆柱和球形等多种全景模式。软件提供了自动图像拼接和手动模式&#xff0c;用户可根据需求灵活选择。同时&#xff0c;PTG…

在家AIAA(美国航空航天学会)文献如何查找下载

今天有位同学的求助文献来自AIAA&#xff08;美国航空航天学会&#xff09;&#xff0c;下面就讲一下不用求助他人自己就可搞定文献下载的途径并实例操作演示。 首先我们先对AIAA&#xff08;美国航空航天学会&#xff09;数据库做个简单的了解&#xff1a; 美国航空航天学会…

使用汇编和proteus实现仿真数码管显示电路

proteus介绍&#xff1a; proteus是一个十分便捷的用于电路仿真的软件&#xff0c;可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域&#xff0c;使用代码实现电路功能的仿真。 汇编语言介绍&#xff1a; 百度百科介绍如下&#xff1a; 汇编语言是培养…

Windows UAC权限详解以及因为权限不对等引发的若干问题排查

目录 1、什么是UAC&#xff1f; 2、微软为什么要设计UAC&#xff1f; 3、标准用户权限与管理员权限 4、程序到底以哪种权限运行&#xff1f;与哪些因素有关&#xff1f; 4.1、给程序设置以管理员权限运行的属性 4.2、当前登录用户的类型 5、案例1 - 无法在企业微信聊天框…

API测试工具

apifox 微信扫描登录 不推荐&#xff1a; Download Postman