当前位置: 首页 > news >正文

C/C++面试可能会问三:指针和数组一样吗?

答案:不一样。


哪里不同?

数组名:数组名的值是一个指针常量,也就是数组第一个元素的地址

它的类型取决于数组元素的类型:如果他们是int类型,那么数组名的类型就是“指向int的常量指针”;如果它们是其他类型,那么数组名的类型也就是“指向其他类型的常量指针”。

总结1:数组名是一个指针常量,不可简单的认为是个指针。它始终指向第一个元素的地址。


那么数组在什么情况下不能作为指针常量呢?

在以下两种场景下:

  • 当数组名作为 sizeof操作符 的操作数的时候,此时sizeof返回的是整个数组的长度,而不是指针数组指针的长度。
  • 当数组名作为 &操作符 的操作数的时候,此时返回的是一个指向数组的指针而不是指向某个数组元素的指针常量

!除了以上两点之外,数据名在其他任何情况下都是指向首元素的指针

更进一步解释:

    指针和数组并不是相等的。为了说明这个概念,请考虑下面两个声明:    

int a[10];
int *b;
  • 声明一个数组时,编译器根据声明所指定的元素数量为数组分配内存空间,然后再创建数组名指向这段空间的起始位置
  • 声明一个指针变量的时候,编译器只为指针本身分配内存空间,并不为任何整型值分配内存空间,指针并未初始化指向任何现有的内存空间

因此,表达式*a是完全合法的,但是表达式*b却是非法的。*b将访问内存中一个不确定的位置,将会导致程序终止。

  • 另一方面b++可以通过编译,a++却不行,因为a是一个常量值。

 

void test01()
{int arr[] = { 1, 2, 3, 4 };//1. sizeof  2.对数组名取地址&arr//以上两种情况下,数组名不是指向首元素的指针//以上两种请款下,数组名是数组类型//!除了以上两点之外,数据名在其他任何情况下都是指向首元素的指针//sizeof 可以不加括号,它是c语言关键字printf("sizeof arr:%d\n", sizeof arr);printf("&arr addr : %d\n", &arr);printf("&arr + 1 addr : %d\n", &arr + 1);   // 数组指针类型:地址直接加了一个数组的长度16字节。相当于类型+1。int *p = arr;//数组名是一个常量指针//arr = NULL;//数组下标能否是负数?//可以是负数p += 3;printf("p[-1]:%d\n", p[-1]);//他们等价printf("p[-1]:%d\n", *(p - 1));//数组指针类型和数组首元素指针类型}
//如何定义一个可以指向数组的指针
void test02()
{int arr[5] = { 1, 2, 3, 4, 5 };//1. 我们先定义数组类型,再定义数组指针类型typedef int(ARRAY_TYPE)[5];  //typedef unsigned int u32ARRAY_TYPE myarray; // int myarray[5];//for (int i = 0; i < 5; ++i){myarray[i] = 100 + i;}for (int i = 0; i < 5; ++i){printf("%d " ,myarray[i]);}//对数组名取地址代表指向整个数组的指针ARRAY_TYPE *pArray = &myarray;pArray = &arr;//1. *pArray 表示拿到pArray指针指向的整个数组//2. *pArray类型就是数组名,指向首元素类型的指针printf("\n*(*pArray + 1) : %d\n", *(*pArray + 1));//2. 直接定义数组指针类型typedef int(*ARRAY_POINTER)[5];ARRAY_POINTER pArr = &arr;//3. 直接定义数组指针变量int(*pArrParam)[5] = &arr;}

相关文章:

C/C++面试可能会问三:指针和数组一样吗?

答案&#xff1a;不一样。 哪里不同&#xff1f; 数组名&#xff1a;数组名的值是一个指针常量&#xff0c;也就是数组第一个元素的地址。 它的类型取决于数组元素的类型&#xff1a;如果他们是int类型&#xff0c;那么数组名的类型就是“指向int的常量指针”&#xff1b;如果…...

数字经济新生态,中小企业如何发展营销数字化

五年弹指一挥间&#xff0c;中国数字经济正从尝试探索迈向快速发展&#xff0c;这一趋势&#xff0c;从今年两会的国务院机构改革、总理政府工作报告、部长通道答疑解惑、科技领域大佬提案中都能看出来。 在政府工作报告中&#xff0c;我们可以看到数字经济在不断壮大&#xff…...

【网络】https协议

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…...

【11】SCI易中期刊推荐——计算机方向(中科院4区)

🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…...

STM32 OTA应用开发——通过串口/RS485实现OTA升级(方式2)

STM32 OTA应用开发——通过串口/RS485实现OTA升级&#xff08;方式2&#xff09; 目录STM32 OTA应用开发——通过串口/RS485实现OTA升级&#xff08;方式2&#xff09;前言1 环境搭建2 功能描述3 程序编写3.1 BootLoader部分3.2 APP的制作4 修改工程中的内存配置4.1 Bootloader…...

【Spring6】| Bean的生命周期(重要)

目录 一&#xff1a;Bean的生命周期 1. 什么是Bean的生命周期 2. Bean的生命周期之5步 3. Bean生命周期之7步 4. Bean生命周期之10步 5. Bean的scop&#xff08;作用域&#xff09;不同&#xff0c;管理方式不同 6. 自己new的对象如何让Spring管理 一&#xff1a;Bean的…...

【C#】单据打印方案(定义打印模板、条形码、二维码、图片、标签)

系列文章 C#项目–业务单据号生成器&#xff08;定义规则、自动编号、流水号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 C#项目–开始日期结束日期范围计算&#xff08;上周、本周、明年、前年等&#xff09; 本文链接&…...

前后端身份验证

1、web 开发模式 【】基于服务端渲染的传统 Web 开发模式 【】基于前后端分离的新型 Web 开发模式&#xff1a;依赖于 Ajax 技术的广泛应用。后端只负责提供 API 接口&#xff0c;前端使用 Ajax 调用接口的开发模式 2、身份认证 【】服务端渲染推荐使用 Session 认证机制 【】…...

【蓝桥杯嵌入式】ADC模数转换的原理图解析与代码实现(以第十一届省赛为例)——STM32G4

&#x1f38a;【蓝桥杯嵌入式】专题正在持续更新中&#xff0c;原理图解析✨&#xff0c;各模块分析✨以及历年真题讲解✨都在这儿哦&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 - 蓝…...

Matlab表示 CDF 时间值

从 CDF 纪元对象中提取日期信息。CDF 表示时间的方式与 MATLAB 不同。CDF 将日期和时间表示为自 1-Jan-0000 以来的毫秒数。这在 CDF 术语中称为纪元。为了表示 CDF 日期,MATLAB 使用一个称为 CDF 纪元对象的对象。MATLAB 还可以将日期和时间表示为日期时间值或日期序列号,即…...

基于Halcon的条码定位与识别【包含 一维码 和 二维码 】

1.针对一维码问题,先列代码: dev_update_off () dev_close_window () dev_open_window (0, 0, 600, 819, black, WindowHandle) dev_set_draw (margin) *读图 read_image (Image, 20221213-174036.png)*获取一维码区域对原图进行抠图 gen_rectangle1 (ROI_0, 2169.33, 1835.…...

每天学一点之多线程

多线程 一、相关概念 并发与并行 并行&#xff08;parallel&#xff09;&#xff1a;指多个事件任务在同一时刻发生&#xff08;同时发生&#xff09;。 并发&#xff08;concurrency&#xff09;&#xff1a;指两个或多个事件在同一个微小的时间段内发生。程序并发执行可以…...

自动化测试必会的数据驱动测试你真的学会了吗?

数据驱动测试 在实际的测试过程中&#xff0c;我们会发现好几组用例都是相同的操作步骤&#xff0c;只是测试数据的不同&#xff0c;而我们往往需要编写多次用例来进行测试&#xff0c;此时我们可以利用数据驱动测试来简化该种操作。 参数化&#xff1a; 输入数据的不同从而…...

cpp之十大排序算法

十大排序算法 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-riZ9z3wf-1678258189998)(null)] 排序算法的稳定性&#xff1a;在具有多个相同关键字的记录中&#xff0c;若经过排序这些记录的次序保持不变&#xff0c;说排序算法是稳定的。 插入排序…...

java-正装照换底色小demo-技术分享

文章目录前言java-正装照换底色小demo-技术分享01 实现思路02 效果02::01 原图:02::02 执行单元测试:02::03 效果:03 编码实现前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞…...

(枚举)(模拟)(二位前缀和)99. 激光炸弹

目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 99. 激光炸弹 - AcWing题库 数&#xff5e;啦&#xff01;我草&#xff0c;又~在&#xff5e;水&#xff5e;字&#xff5e;数&#xff5e;啦&#xff01;我草&#xff0c;又~在&#xff5e;水&#xff5e;字&am…...

vue3+vite项目移动端适配:postcss-pxtorem和amfe-flexible

一&#xff0c;定义 postcss-pxtorem PostCSS 的一个插件&#xff0c;可以从像素单位生成 rem 单位。 amfe-flexible amfe-flexible是配置可伸缩布局方案&#xff0c;主要是将1rem设为viewWidth/10。 二&#xff0c;使用 1. 设置 viewport 在 index.html 中&#xff1a; &l…...

sin x和cos x的导数

我们都知道(sin⁡x)′cos⁡x(\sin x)\cos x(sinx)′cosx&#xff0c;(cos⁡x)′−sin⁡x(\cos x)-\sin x(cosx)′−sinx&#xff0c;但是为什么呢&#xff1f; sin⁡x\sin xsinx的导数 (sin⁡x)′lim⁡Δx→0sin⁡(xΔx)−sin⁡xΔx(\sin x)\lim\limits_{\Delta x\rightarrow 0…...

html下自动消失的提示框jQuery实现

引言 最近在找一个可以自动消失的提示框&#xff0c;找来找去&#xff0c;找到了这个&#xff1a;提示框设置_html页面提示框等待一定时间消失博主写得很好&#xff0c;可以直接复制运行出来&#xff0c;我也从中得以受益。本篇文章对这篇博客的代码做了一些小的更新&#xff…...

第27篇:Java日期处理总结(一)

目录 1、Date类 1.1 如何实例化Date对象 1.2 Date相关操作方法 1.3 如何获取当前日期...

cutlass代码架构分析

CUTLASS 代码架构分析 本文档基于 cutlass代码进行梳理,快速理解 CUTLASS 4.x 的模块边界与调用链路。 1. 总体架构 CUTLASS 本质上是一个 header-only 的 CUDA C++ 模板库,外围配套了可选构建目标: include/:核心库(cutlass + cute) tools/:库实例化、性能测试与通用…...

京东云GPU服务器省钱攻略:如何根据业务需求灵活选择计费模式和虚拟化方案

京东云GPU服务器成本优化实战指南&#xff1a;精准匹配业务需求的选型策略 在AI与高性能计算领域&#xff0c;GPU服务器已成为企业技术基础设施的核心组件。然而&#xff0c;面对复杂的计费模式、多样的硬件配置以及差异化的虚拟化方案&#xff0c;许多技术决策者常常陷入"…...

雨课堂运动与健康网课高效学习指南

1. 雨课堂运动与健康网课学习资源整合 第一次接触雨课堂的运动与健康网课时&#xff0c;我和很多同学一样手忙脚乱。平台上的资料分散在各个角落&#xff0c;视频、文档、测试题混在一起&#xff0c;根本不知道从哪里开始。后来摸索出一套资源整理方法&#xff0c;效率直接翻倍…...

C1——优化3Dtiles透明度设置以实现管线可视化

1. 为什么需要调整3Dtiles透明度&#xff1f; 在地理信息系统&#xff08;GIS&#xff09;和三维可视化项目中&#xff0c;我们经常会遇到多层数据叠加显示的需求。比如在城市地下管线可视化场景中&#xff0c;地表建筑模型&#xff08;3Dtiles&#xff09;和地下管线网络需要同…...

卡尔曼滤波+LQR实战:用Python手写一个LQG控制器(附Jupyter Notebook)

卡尔曼滤波LQR实战&#xff1a;用Python手写一个LQG控制器&#xff08;附Jupyter Notebook&#xff09; 在机器人控制和自动化系统设计中&#xff0c;LQG&#xff08;Linear Quadratic Gaussian&#xff09;控制是一种经典且强大的控制策略。它巧妙地将卡尔曼滤波的状态估计能力…...

基于springboot美食分享平台设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍&#xff1a;CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

EMI滤波器选型指南:从共模与差模噪声到实际应用场景

1. EMI滤波器的核心作用与选型挑战 刚入行那会儿&#xff0c;我负责的第一个电源项目就栽在了EMI测试上。设备一上电&#xff0c;测试仪器的曲线就像心电图发作似的疯狂跳动。当时 mentor 只说了一句&#xff1a;"去查查共模和差模的区别"。这句话成了我后来十年硬件…...

遥感影像配准总对不齐?OpenCV+RST+PROJ4三重坐标系对齐实战(附WGS84→UTM→影像本地坐标的转换矩阵速查表)

第一章&#xff1a;Shell脚本的基本语法和命令Shell脚本是Linux/Unix系统自动化任务的核心工具&#xff0c;以可执行文本文件形式存在&#xff0c;由Bash等shell解释器逐行解析运行。其语法简洁但严谨&#xff0c;对空格、分号、引号和换行符敏感&#xff0c;需严格遵循语法规则…...

3步搞定ERPNext自动化部署:让企业管理系统安装变得简单

3步搞定ERPNext自动化部署&#xff1a;让企业管理系统安装变得简单 【免费下载链接】erpnext_quick_install Unattended install script for ERPNext Versions, 13, 14 and 15 项目地址: https://gitcode.com/gh_mirrors/er/erpnext_quick_install 还在为复杂的ERPNext安…...

泰克TBS2000示波器保存功能全攻略:从U盘插入到图片导出(附最佳格式选择)

泰克TBS2000示波器高效保存指南&#xff1a;从硬件操作到专业文档整合 在电子工程实验室的日常工作中&#xff0c;波形数据的保存与共享是每个工程师都会遇到的高频需求。传统用手机拍摄屏幕的方式不仅画质堪忧&#xff0c;还常常因为反光、角度偏差导致关键参数无法辨识。泰克…...