数组和数组名的关系

C语言中与指针相关问题——论数组名和数组名取地址的关系 这是由一道面试题联想到的一些问题,这里自己给做个小总结!首先看看这道面试题:#include <stdio.h> int main() { int a[5] = { 1, 2, 3, 4, 5 }; int *pi = &a + 1; printf("%d, %d\n", *(a + 1), *(pi - 1)); return 0; }答案是2, 5。至于是为什么, 阅读详情
1.以下代码是正确的:
int main(int argc, char **argv)
{  
int  a[2] = {7,8}; 
cout <<  a << endl; 
int * c  ;
c =  a;
//cout << c << endl;  

system("pause");
return 0;
}
2.以下代码是错误的:会报错。
int main(int argc, char **argv)
{   
int   b[2][2]  = { 2 , 3,4,5 };  
cout << b << endl;
int * c  ;
c =  b;
//cout << c << endl; 
 
system("pause");
return 0;
}  
这是为什么呢?
正确的解释:


c是指向整型的指针
b是数组的数组,会隐含转换为指向第一个数组的指针(常量)
*b是取消引用,这就得到的是第一个数组,和上面一行一样,此时*b还会隐含转换,转换为第一个整型元素的指针(常量),这样就和c的类型一样了。
这里的赋值有两次数组名向指针的隐含转换


因为b[2][2]是两个一维数组因此我们可以得到:


cout <<  *(b +1) << endl; // b代表第1个一维数组的首地址,b+1代表第2个一维数组的首地址 *(b+1)代表第2个数组第1个元素的地址。 
cout <<  &b[1][0] << endl; // 取b[1][0]的地址


cout <<  (*b )+1 << endl; // b代表第1个一维数组的首地址,*b代表第1个一维数组的第一个元素的地址 (*b)+1代表地1个一维数组第2个元素的首地址。
cout <<  &b[0][1] << endl;
前两个输出的值一样,后两个输出的值一样。
因此,可以用不同方式得到数组中不同的值。
【实战指南】Green Hills MULTI-IDE 从零安装到工程创建全流程 本文详细介绍了Green Hills MULTI-IDE从零安装到工程创建的全流程,包括系统要求检查、安装步骤、工程配置及调试技巧。特别适合嵌入式开发新手快速上手这款专业IDE工具,提升开发效率。 阅读详情

相关推荐

Python_构建同花顺问财智能选股API服务

本文详细介绍了如何使用Python构建同花顺问财智能选股API服务,涵盖从环境准备、核心API开发到高级功能扩展的全过程。通过Flask框架和pywencai库,开发者可以快速搭建稳定可靠的选股接口,实现自动化股票筛选与交易系统集成,提升量化投资效率。

weixin_30596343的博客 333

*数组名(数组元素) 与*数组名(指针数组中的数组名)

*数组名(数组元素):A=&A[0]*A

leafinsnowfield的专栏 990

OnlyOffice Docker部署全攻略:解除连接限制+文件大小限制+中文字体优化

本文详细介绍了OnlyOffice企业级Docker部署的完整解决方案,重点破解连接限制、文件大小限制和中文字体优化三大核心痛点。通过定制化镜像部署、性能调优配置和中文字体深度优化,帮助企业实现高效稳定的文档协作平台。

weixin_28837817的博客 368

数组与数组名到底该如何理解?

数组与数组名的理解。

phantomthief1412的博客 1819

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 283

ETL数据集成案例

一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。

runqu的博客 948

C语言中的 &和 *,以及数组名的本质,你理解吗?

根据大学中传授的知识,&叫做取地址,*叫做取内容。但是这种说法并不准确,也并不全面。 正确说法是:&叫作引用(reference),*叫作解引用(dereference),两者互为逆运算。 先举几个例子: //大学中学到的取地址和取内容 int a = 10; int * pa = &a;//此*仅仅是用于定义/声明指针变量用;&可理解为取地址 pri...

Eason_Grace的博客 4395

abaqus 6.13安装(ubuntu 16.04LTS)

1。从iso将文件拷贝出来 2。chmod 777 -R ./* 给文件权限 3。sudo /home/xx/A/setup 4。安装licenseserver 5。拷贝lic,log文件 6。打开license sudo ./lmgrd -c path 7. 27011@xx or 27011@localhost ...

a1099313374的博客 1950

C语言学习

#define 常量名 大小 数组初始化: 部分初始化,其它初始化为0 {}中只有一个0,则全部为0 不初始化,则为随机数 如果【】中不写,必须初始化 数组名是数组首元素地址 字符串一定是字符数组,字符数组不一定是字符串 如果字符数组以’\0’,(等价与数字0)结尾,那么这个字符数组是字符串 char b[10]={'a','b','c','\0'} char b[10]={'a','b','c',0}; 两个等价 char b[]={'a','b','c'}; printf("%s\n",b);

weixin_50911232的博客 2875

centos-stream-9上安装nvidia驱动和cuda-toolkit

centos-stream-9上安装nvidia驱动和cuda-toolkit

qq_19072921的博客 3021

YOLO26改进策略【卷积层】| DWRSeg :高效获取多尺度上下文信息,二次改进C3k2

本文记录的是利用DWR 模块改进 YOLO26 的特征提取部分。(Dilation-wise Residual)通过两步残差流程(区域残差化-语义残差化)与分支化空洞卷积结合,引导解码器处理特征与跳接特征的多尺度精准融合。本文利用模块,通过区域残差化生成简洁区域型特征图以简化融合基础,再通过分支化空洞卷积捕捉多尺度空间上下文,同时依托残差连接保留原始特征信息,对YOLO26中不同尺度目标特征进行针对性强化、抑制无效背景特征干扰,在特征融合阶段实现多尺度语义与细节信息的高效互补,避免传统多感受野卷积的冗余计算

Limiiiing的博客 159

C++中的*、&、指针、引用、数组名和二维数组名的含义

C++中的*、&、指针、引用、数组名和二维数组名,对于初学者来说,很难理解,尤其是C语言掌握不好的人来说。 一、*、&、指针、引用 int a = 1024; int *ia = &a; //&在右边,叫作取地址,&a是变量a的地址 int &b = a; //&在左边,叫作引用,b和a一样 cout << "&a =

u011895157的博客 3529

YOLO26涨点改进 |独家创新,小目标涨点改进篇 | Arxiv 2025 | MHAF‑YOLO,引入RepHMS高效特征提取模块,适合轻量级目标检测、小目标检测、图像分类、旋转目标检测、实例分割

本文提出了一种改进的YOLO26目标检测模型,通过引入RepHMS模块和多分支辅助特征金字塔结构(MAFPN),显著提升了模型性能。RepHMS模块采用多分支异构卷积和重参数化策略,在不增加推理开销的情况下增强多尺度特征提取能力,尤其提升了小目标检测效果。实验表明,改进后的MHAF-YOLO模型在COCO数据集上仅用7.1M参数就达到48.9% AP,相比YOLO11-s参数量减少24.4%而性能提升1.9%。文章详细介绍了RepHMS模块的原理、实现代码及在YOLO26中的集成方法,并提供了两种改进配置。

Ai缝合怪、助力小伙伴高效发论文 199

C语言数组名和指针的关系

案例: int matrix[3][10]; matrix[1][5] matrix: 指向包含10个整型元素的数组的指针, 指代第一行, 第一行是子数组 matrix+1: 指向包含10个整型元素的数组的指针+1表示第二行, 第二行是子数组 *(matrix+1): 对matrix+1进行间接访问操作, 选择第二行的子数组 *(matrix+1)+5: 这个指针比*(matrix...

knighkingLOL的博客 426

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

真正理解C++中数组名和指针之间的关系

前言 自己琢磨问题的时候更喜欢在代码里面写记录,反而不喜欢在MarkDown记录,每次会将完整版源码放在最后,其实源码前面的内容我也不是很想写 C++中的数组 随手写了,可能有概念上的错误,大多也是大白话,毕竟自己也是小白,说不了多么高大尚的话语,通俗易懂就是最好的。 数组 数组:是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。它可以存储一个固定大小的相同类型元素的顺序集合。 一维数组的声明方式: // 1.使用未初始化的内存,不会补0 type arrayName [ arrayS

Jacob_xyb 882

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++中数组名和指针的关系

指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。很幸运,我的大学老师就是其中之一。时至今日,我日复一日地进行着C/C++项目的开发,而身边还一直充满这样的程序员,他们保留着"数组名就是指针"的误解。   想必这种误解的根源在于国内

yapian8的专栏 683

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

C语言中数组名和指针的关系

C语言中数组名和指针的关系 本文假定读者对C语言中的数组、指针的概念已经有了解。 1. 一维数组 int a[10]; int *pa = a; 这里a是数组名,在一般表达式中,a是一个指针常量,它指向数组中第一个元素,因此a的值和&a[0]的值是相同的. 如下程序段: printf("%p\n", a); printf("%p\n", pa); printf

匿_名_用_户的专栏 2160

数组名和数组首个元素之间的关系,以及他们之间的概念混同的错误

数组名代表数组第一个元素的首地址! 数组名存着整个数组的开头地址,而数组元素的存储是在数组所开辟出来的内存空间(连续的空间)中从头往后存值的,所以数组名可看作一个指针(指向数组的开头),数组名存的值也就和数组第一个元素的值相同。 int a[5] = {1,2,3,4,5}; a, &a, &a[0]三者地址在数值上一样 ,所含意义不同! a[0]------数组的第一个元素

Fizz_沫烨的博客 1766

【指针和数组名】一篇文章搞懂它们之间的暧昧关系

一篇让你明白数组和指针的关系

想要慢慢变得优秀的向阳的博客 1166

c语言中,指针和数组关系紧密,但是两者不是等价的。数组名是指针常量,指针是变量

经过查询,标题这句话是正确滴!C语言中指针和数组的关系确实紧密,但它们并不等价。数组名是一个指向数组首元素的常量指针,而指针是一个可以改变指向的变量的地址的变量。是一个变量指针,最初指向数组的首元素,但后来被修改为指向数组的第三个元素。是数组的名字,它是一个常量指针,指向数组的首元素。的值,因为它是常量,但我们可以修改。的值,因为它是一个变量。

wanghao312的博客 932

数组名和指针的关系

从大一学c语言的时候我就觉得数组名就是指向首元素的指针,今天一看豁然开朗 原文链接:https://blog.youkuaiyun.com/ycc541/article/details/44964723 引言   指针是C/C++语言的特色,而数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生

鱼香肉丝没有鱼的博客 694

数组名和数组地址的关系

像char a[10]这样的数组,到底A是什么呢?学过C++的都知道,a是一个地址。但是为什么我们cout 这个问题困扰了我很久,终于下决心把它刨根问底。 由于是直接学习C++,因此C语言的低级操作接触得较少。经过两天的网上资料查找,终于发现,并且可以确定,a,其实就是一个地址!不同于指针。我们知道,指针有它所指向的地址——也就是它的值。并且它自己也有一个地址。(可以用

让疑问和无知见鬼去吧! 1155

数组名和首元素关系

我们来一个一个的看,首先 打印出来的arr,&arr和arr[0]的地址都是一样的。接着再看,arr+1和arr的地址相差正好是四个字节,但是&arr和&arr+1相差了28(16进制),换算成十进制,就是40字节,也就是一整个数组的大小,而&arr[0]和&arr[0]+1相差也正好是四个字节。从这几个地址的打印我们可以看出来,直接打印的时候数组名表示是数组第一个元素的地址,但是&数组名表示的是取一整个数组的地址,即&后面的数组名代表了一整个数组,而单独的一个数组名则表示数组首元素的地址。

zhaoyanyuszz的博客 181

数组指针和指针数组及数组名的相互关系

为了方便讲解  文章全部由代码实现并讲解:#include &lt;iostream&gt; using namespace std; int main() { int a[2][3] = { {1,2,3},{4,5,6} }; cout &lt;&lt; *a[0]&lt;&lt;","&lt;&lt;*(a[0]+1) &lt;&lt; endl; //输出第零行第0个元素和第1个...

liuqiang的博客 504

最简单易懂的指针地址和数组名关系

文章目录一维数组二维数组 一维数组 int num[10] = {1,2,3,4,5,6,7,8,9}; /*数组名是首元素地址,即整型指针,而我们知道指针加减整数代表访问权限的大小*/ num = num + 0 = &num[0] num + 1 = &num[1] num + 2 = &num[2] num + 3 = &num[3] ............ /*指针解引用就是对应地址的值*/ *(num) = *(nu

m0_51723227的博客 826

c++指针(三)——指针和数组名的关系

这一篇文章揭秘指针和数组名的关系~~~(1)、数组的定义int array[10];//定义了一个数组array,并且初始化都为0,数组为{0,0,0,0,0} int array[10]={1,2};//定义了一个数组array,并且初始化都为0,但是第一,第二个元素又被改写为1和2,最后数组为{1,2,0,0,0}int array[];//该定义错误,没有指定需要多少的内存空间,系统无法分配...

大风车 3125
上一篇: memset()函数用法
下一篇: 取数组首地址的问题:
CHF_VIP
博客等级 码龄14年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值