笔试题之指针和数组的精讲

news2024/11/23 18:16:56

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互赞互关一下,看到必回
👑👑👑💎👑👑👑   

 一:一维数组

二:字符数组

三:二维数组


对sizeof() strlen()函数理解

sizeof():统计参数大小,单位是字节

strlen(): 是统计字符串长度的函数,只统计 \0 之前的字符个数,对应参数  类型必须是char*

1.一维数组习题

 //一维数组

int a[ ] = {1,2,3,4};

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

printf("%d\n",sizeof(a+0));

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

printf("%d\n",sizeof(a+1));

printf("%d\n",sizeof(a[1]));

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

printf("%d\n",sizeof(*&a));

printf("%d\n",sizeof(&a+1));

printf("%d\n",sizeof(&a[0]));

printf("%d\n",sizeof(&a[0]+1));

 我们在做题之前需要先知道以下知识点:

1)数组名表示数组首元素的地址

2)但有2个例外:sizeof(数组名),这里的数组名表示整个数组,这个求的是整个数组的大小,单位是字节

3) &数组名:这里的数组表示整个数组,取出的是整个数组的地址

解析如下:

int a[] = { 1,2,3,4 };

    printf("%d\n", sizeof(a));// 16  int类型数据占4个字节,所以此数组元素总的字节数是 4*4 = 16

    printf("%d\n", sizeof(a + 0));// 4(x86环境) / 8(64环境) a+0表示首元素的地址,是地址就是4/8个字节

    printf("%d\n", sizeof(*a));//4  sizeof(4) 4的数据类型是int类型

    printf("%d\n", sizeof(a + 1));//4    a+1表示第二个元素地址,是地址就是4/8个字节

    printf("%d\n", sizeof(a[1]));//4   求实等价于求sizeof(2)所占的字节数

    printf("%d\n", sizeof(&a));//   4/8    &a取出的是整个数组地址,sizeof(&a)求的是整个数组地址,是地址就是4/8个字节

    printf("%d\n", sizeof(*&a));//  16  &a取出的是整个数组的地址,之后在进行解引用,访问就是整给数组,所以此数组所占的字节数:4*4

    printf("%d\n", sizeof(&a + 1));// 4/8  &a+1 跳过整个数组的地址,但是求的仍是数组的地址

    printf("%d\n", sizeof(&a[0]));// 4 / 8  求的是数组首元素的地址

    printf("%d\n", sizeof(&a[0] + 1));//  4 / 8  求的是第二个元素地址

 printf("%d\n", sizeof(&a + 1));// 4/8  &a+1 跳过整个数组的地址,但是求的仍是数组的地址

2.字符数组

char arr[ ] = {'a','b','c','d','e','f'};

 printf("%d\n", sizeof(arr));

printf("%d\n", sizeof(arr+0));

printf("%d\n", sizeof(*arr));

printf("%d\n", sizeof(arr[1]));

printf("%d\n", sizeof(&arr));

printf("%d\n", sizeof(&arr+1));

printf("%d\n", sizeof(&arr[0]+1));

printf("%d\n", strlen(arr));

printf("%d\n", strlen(arr+0));

printf("%d\n", strlen(*arr));

printf("%d\n", strlen(arr[1]));

printf("%d\n", strlen(&arr));

printf("%d\n", strlen(&arr+1));

printf("%d\n", strlen(&arr[0]+1));

首先我们对strlen()和sizeof()要先有基本的了解

解析如下:

printf("%d\n", strlen(*arr));

printf("%d\n", strlen(arr[1]));

以上2个代码是错误的,因为strlen()参数类型是char* 的指针

但实际传的并不是指针,而是一个字符,所以会报错

2.用字符串初始化字符数组

对应运行结果:

3.字符串初始化字符指针

char *p = "abcdef";

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

printf("%d\n", sizeof(p+1));

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

printf("%d\n", sizeof(p[0]));

printf("%d\n", sizeof(&p));

printf("%d\n", sizeof(&p+1));

printf("%d\n", sizeof(&p[0]+1));

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

printf("%d\n", strlen(p+1));

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

printf("%d\n", strlen(p[0]));

printf("%d\n", strlen(&p));

printf("%d\n", strlen(&p+1));

printf("%d\n", strlen(&p[0]+1));

 4.二维数组

int a[3][4] = {0};

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

printf("%d\n",sizeof(a[0][0]));

printf("%d\n",sizeof(a[0]));

printf("%d\n",sizeof(a[0]+1));

printf("%d\n",sizeof(*(a[0]+1))); 

总结: 数组名的意义:

1. sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。

2. &数组名,这里的数组名表示整个数组,取出的是整个数组的地址。

3. 除此之外所有的数组名都表示首元素的地址。

对应解析如下:

4.1对二维数组的理解

我们可以把二维数组看成是一维数组的数组

4.2对a[0], a[1] ,a[2] 理解

注意这里 a[0] 可不同于一维数组的a[0],这里的a[0] 表示:第一行元素所对应的数组名,同时也表示首元素的di'zh

printf("%d\n",sizeof(a[0]+1));

a[0]代表第一行元素的地址,对应类型是int*,指针+1跳过4个字节,此时a[0]+1指向第一行的第二列元素的地址,此时所求地址大小是 4 / 8字节

printf("%d\n",sizeof(*(a[0]+1)));

a[0]+1此时指向的是这个二维数组第一行第二列元素地址

*(a[0]+1)是对第一行第二列元素地址进行解引用,及取出的的元素 0,对应大小是4个字节

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

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

相关文章

Ubuntu 和 Windows 文件互传

FTP 服务 FTP 采用 Internet 标准文件传输协议 FTP 的用户界面, 向用户提供了一组用来管理计算机之间文件传输的应用程序。在开发的过程中会频繁的在 Windows 和 Ubuntu 下进行文件传输,比如在 Windwos 下进行代码编写,然后将编写好的代码拿到…

JavaEE初阶(18)(JVM简介:发展史,运行流程、类加载:类加载的基本流程,双亲委派模型、垃圾回收相关:死亡对象的判断算法,垃圾回收算法,垃圾收集器)

接上次博客:初阶JavaEE(17)Linux 基本使用和 web 程序部署-CSDN博客 目录 JVM 简介 JVM 发展史 JVM 运行流程 JVM的内存区域划分 JVM 执行流程 堆 堆的作用 JVM参数设置 堆的组成 垃圾回收 堆内存管理 类加载 类加载的基本流…

Windows conan环境搭建

Windows conan环境搭建 1 安装conan1.1 安装依赖软件1.1.1 python安装1.1.2 git bash安装1.1.3 安装Visual Studio Community 20191.1.3.1 选择安装的组件1.1.3.2 选择要支持的工具以及对应的SDK 1.1.4 vscode安装 1.3 验证conan功能1.4 查看conancenter是否包含poco包1.5 查看…

SQL 日期函数

在数据库中,日期和时间是经常需要处理的数据类型之一。SQL提供了许多内置的日期函数,用于对日期和时间进行操作、计算和比较。这些函数可以帮助我们提取日期的各个部分(如年份、月份、日、小时、分钟等),执行日期的转换…

第一百七十二回 SegmentedButton组件

文章目录 1. 概念介绍2. 使用方法2.1 SegmentedButton2.2 ButtonSegment 3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"SearchBar组件"相关的内容,本章回中将 介绍SegmentedButton组件.闲话休提,让我们一起Tal…

抖斗音_快块手直播间获客助手+采集脚本+引流软件功能介绍

软件功能: 支持同时采集多个直播间,弹幕,关*注,礼*物,进直播间,部分用户手*号,粉*丝团采集 不支持采集匿*名直播间 设备需求: 电脑(win10系统) 文章分享者&#xff1…

【Linux】第十五站:环境变量

文章目录 一、进程相关的一些概念1.一些常见的概念2.对于并发3.**进程切换** 二、环境变量1.PATH环境变量2.HOME环境变量3.SHELL环境变量4.env5.系统调用接口与环境变量6.什么是环境变量?7.命令行参数8.main函数的第三个命令行参数9.如何验证环境变量是可以被继承的…

java实现选择排序

图解 以下是Java实现选择排序的示例代码&#xff1a; public class SelectionSort {public static void selectionSort(int[] arr) {int n arr.length;// 遍历未排序部分的数组for (int i 0; i < n - 1; i) {// 在未排序部分中查找最小元素的下标int minIndex i;for (in…

MySQL 人脸向量,欧几里得距离相似查询

前言 如标题&#xff0c;就是通过提取的人脸特征向量&#xff0c;写一个欧几里得 SQL 语句&#xff0c;查询数据库里相似度排前 TOP_K 个的数据记录。做法虽然另类&#xff0c;业务层市面上有现成的面部检索 API&#xff0c;技术层现在有向量数据库。 用 MySQL 关系型存储 128 …

新学期帮娃把拖延症戒了!这个时间管理器太太太有用啦!

十个孩子九个拖延~ 不要唠叨&#xff0c;不要指责 时间流逝一眼可见&#xff0c;打败拖延症&#xff01; 赶紧把这款时间管理器用上 当当狸时间管理器 说起孩子没有时间观念、拖延症 每个老母亲都有一肚子苦水要倒&#xff5e;&#xff5e; 市面上有很多计时器&#xff0…

【k8s集群搭建(一):基于虚拟机的linux的k8s集群搭建_超详细_解决并记录全过程步骤以及自己的踩坑记录】

虚拟机准备3台Linux系统 k8s集群安装 每一台机器需要安装以下内容&#xff1a; docker:容器运行环境 kubelet:控制机器中所有资源 bubelctl:命令行 kubeladm:初始化集群的工具 Docker安装 安装一些必要的包&#xff0c;yum-util 提供yum-config-manager功能&#xff0c;另两…

主题讲座:全球增材制造现状与未来(暨香港科技大学广州|智能制造学域2024博士学位全额奖学金项目)

时间&#xff1a;2023 年11月16日&#xff08;星期四&#xff09;14:30 地点&#xff1a;合肥工业大学 学术会议中心三楼报告厅 主讲嘉宾&#xff1a;陈模军 助理教授 https://facultyprofiles.hkust-gz.edu.cn/faculty-personal-page/CHEN-Mojun/mjchen 报名表直达&#xff1…

Java 入门基础题

目录 1.输出一个整数的每一位 2.判定素数 3.求最大值方法的重载 4.输出闰年 5.打印 X 图形 6.数字9 出现的次数 7.计算分数的值 8. 模拟登陆 9.使用函数求最大值 10.斐波那契数列 星光不负赶路人&#xff0c;加油铁子们&#xff01;&#xff01;&#xff01; 1…

No205.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

人工智能与充电技术:携手共创智能充电新时代

人工智能与充电技术&#xff1a;携手共创智能充电新时代 摘要&#xff1a;本文探讨了人工智能与充电技术的结合及其在未来充电设施领域的应用。通过分析智能充电系统的技术原理、优势以及挑战&#xff0c;本文展望了由人工智能驱动的充电技术为未来电动交通带来的巨大变革与机…

java实现插入排序

图解 以下是Java实现插入排序的代码&#xff1a; public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…

【Linux】-文件系统的详解以及软硬链接

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

【Qt之QWizard】使用1

QWizard使用 描述方法枚举&#xff1a;enum QWizard::WizardButton枚举&#xff1a;enum QWizard::WizardOption枚举&#xff1a;enum QWizard::WizardStyle枚举&#xff1a;enum QWizard::WizardPixmap常用成员方法槽函数信号 示例设置标题添加page页设置按钮文本设置自定义按…

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

Linux shell编程学习笔记25:tty

1 tty的由来 在 1830 年代和 1840 年代&#xff0c;开发了称为电传打字机&#xff08;teletypewriters&#xff09;的机器&#xff0c;这些机器可以将发件人在键盘上输入的消息“沿着线路”发送在接收端并打印在纸上。 电传打字机的名称由teletypewriters&#xff0c; 缩短为…