关于c中的表达式“&anArray”

2023-12-29

首先,我读到:

  • array
  • &array
  • &array[0]

只要“array”确实是一个数组,一切都会相同。 所以我尝试:

int main(){ 
     char ar[]={'a','b','c','\0'};
     printf("argument: &ar     %s\n",&ar);
     printf("argument: &ar[1]    %s\n",&ar[1]);
}

输出:

argument:&ar   abc  
argument:&ar[1]  bc

看起来&ar被视为指向第一个元素的指针,而不是指向“ar”的指针,如果我没有记错的话,“ar”本身就是指向第一个元素的指针。

因为这不应该是 &(指向字符的指针) 的处理方式,我尝试过:

char a='s';
char *pa=&a;
printf("argument: &pa   %c\n",&pa);

输出为%c甚至不是一个角色。 指向数组第一个元素的指针也不应该如此处理。我试过:

char *pa=&ar[0];
char **ppa= &pa;
printf("argument: &pa   %s\n", ppa);

输出为%s毫无疑问,这是无稽之谈;但为什么没有&ar是胡说八道吗?对于如果ar是一个指针,不应该&ar是一个指向指针的指针ppa?

我的问题:

  1. 当放在数组名称之前时,是否会简单地忽略“&”? 数组名称对此很特殊吗?
  2. 如果是这样,编译器如何验证“&”后面的标识符是对数组的引用?它实际上是否在声明的数组列表中搜索它?

看来&ar被视为指向第一个元素的指针而不是 指向“ar”的指针,它本身是指向第一个的指针 如果我没记错的话。

You are错误。&ar是一个指向数组的指针ar,但是数组ar is not任何类型的指针(它是一个数组),所以&ar不是指向指针的指针。

数组是对象的连续序列 - 在以下情况下ar,这是一组连续的 4 个chars. &ar是一个指针到这组 4 个字符,这必然意味着它指向与&ar[0], 指向第一个的指针char在那个集合中。但它有不同的类型:&ar有类型char (*)[4]这意味着“指向 4 个字符的数组的指针”并且&ar[0]有类型char *,这意味着“指向字符的指针”。

之所以会出现这种混乱,是因为在几乎所有的表达方式中,ar计算结果为指向数组第一个元素的指针(例外情况是它是一元操作数&操作员或sizeof操作员)。这并不意味着ar is不过,它不是一个指针,只是在大多数情况下它的计算结果是一个指针值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于c中的表达式“&anArray” 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 属性对象什么时候创建?

    由于属性实际上只是附加到程序集的元数据 这是否意味着属性对象仅根据请求创建 例如当您调用 GetCustomAttributes 时 或者它们是在创建对象时创建的 或者 前两个的组合 在由于 CLR 的属性扫描而创建对象时创建 从 CLR
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 如何在 C# 中播放在线资源中的 .mp3 文件?

    我的问题与此非常相似question https stackoverflow com questions 7556672 mp3 play from stream on c sharp 我有音乐网址 网址如http site com aud
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 在 Ansible 角色任务文件中使用 YAML 锚点

    我正在尝试创建一个 ansible 角色任务文件 其中包含多个重复部分 并且我想利用 YAML 的锚点功能 该功能允许跨文件共享数据 在我的实际文件中 我有 3 或 4 个属性需要在文件中的十几个任务中完全相同 因此锚点似乎是完美的解决方案
  • 使用 InputField 时隐藏虚拟键盘

    我知道如何使用隐藏或显示虚拟键盘InputMethodManager 但我想输入文字EditText使用物理键盘 但我不想在 Unity 3D Android 中显示虚拟键盘 我怎样才能在 Unity 3D 中做到这一点 不存在这样的事情E
  • 如何在 Cloud Dataflow 中使用 TextIO.Read 将多个文件与名称进行匹配

    我有一个 gcs 文件夹 如下所示 gs
  • 在 Swift 中,仅在对象的生命周期内调用一次方法

    假设我们覆盖scrollViewDidScroll方法和第一次滚动only 我们想doSomething 实现这一点的一个简单方法是拥有一个实例级布尔变量并切换 检查它 func scrollViewDidScroll scrollView
  • Dojo:在 required=false 时为 FilteringSelect 选择空值

    请看一下这段代码 dojo require dijit form FilteringSelect dojo require dojo store JsonRest dojo declare JsonFilteringSelect dijit
  • 结账时修改 Shopify 运费

    Is there a possibility that we could add a custom shipping price at checkout through an API call or script 我想根据一些规则修改价格
  • Array.isDefinedAt 用于 scala 中的 n 维数组

    有没有一种优雅的表达方式 val a Array fill 2 10 1 def do to elt i Int j Int if a isDefinedAt i a i isDefinedAt j f a i j 在斯卡拉 我建议您不要将
  • OpenXML - SpreadsheetReader 在当前上下文中不存在

    所以我试图复制这个答案使用 Openxml 2 0 在 Excel 中获取单元格背景颜色 https stackoverflow com questions 10756206 getting cell backgroundcolor in
  • 许可检查器的“已激活”状态的寿命。对于用户来说,多频繁才算过多?

    我的应用程序是一种袖珍指南 包含全年的一些数据 我假设用户将至少使用该程序一次并通过互联网访问来激活许可证 或者至少这是我对 Android 许可系统如何工作的理解 我正在使用服务器管理策略 它会定期检查许可证吗 有什么办法可以控制这个吗
  • 将 docker 卷挂载到 Windows 主机

    我正在我的 Windows 10 机器上运行 docker for windows 使用 hyper v 如果我运行以下命令 docker volume create test docker volume inspect test I ge
  • MongoDb 中的 $push 不起作用?

    我的架构如下所示 var exampleSchema newSchema profile experience exp String 这是更新个人资料收集中的经验的代码 exampleSchema statics experience fu
  • 如何在anjuta项目中包含资源文件

    我正在尝试更新 vala 中的图形项目 将大量代码行移动到 ui 文件中 我想使用模板 可用于 glib 2 38 和 GTK 3 8 类似的东西 我的项目是用 Anjuta 和 autoconf 管理的 In the src目录有 app
  • 如何在 PHP 中进行 URL 重写?

    我正在尝试在我的 PHP 应用程序中实现 URL 重写 有人可以分享一下在 PHP 和 MySQL 中实现 URL 重写的分步过程吗 在我的应用程序中 我想实现以下 URL 重写 我想重定向 1 http example com video
  • Firefox ... SVG ... 下划线...天哪?

    到目前为止 我尝试的任何方法都无法让 Firefox 在某些文本下划线 根据谷歌的结果 这个问题已知并记录了五年多 这不可能是真的 发生了什么事 有人知道任何持续有效的解决方法 甚至可能知道他们为什么还没有修复它的原因 我对此很好奇 Fir
  • OCaml:模式匹配与 If/else 语句

    因此 我对 OCaml 完全陌生 并且在实现第一个功能方面进展相当缓慢 我无法理解的一件事是何时使用模式匹配功能 例如 let foo gt true gt false 与使用 if else 结构类似 let foo a if a the
  • 如何在部署时在Heroku中自定义pip的requirements.txt?

    我正在将 Python Django 应用程序部署到 Heroku 并且仅当部署到 Heroku 等某些环境时 我才想自定义requirements txt 文件 通过添加 git 支持的依赖项和密码 我很想将其设置在环境变量或其他变量中
  • 在模板类实现中使用struct template

    我正在尝试学习 C 中的模板用法 我创建了一个结构节点 在队列类实现中使用它 但出现编译器错误 错误 成员函数 bool MyQueue add T data 中 qnode 之前的预期类型说明符 include
  • 获取 R 中某个因子中出现次数最多的元素

    我在 R 变量中有一组字符串 当我检查类时 它说它是一个因素 例如 mySet lt c abc abc def abc def efg abc 我想获取该集合中出现次数最多的字符串 即本例中的 abc 我理解一种方法是使用hist 但我面
  • 安装 Visual Studio 扩展

    我刚刚开始使用 VS2015 但在做一些本应简单的事情时遇到了麻烦 安装 Side Waffle 扩展 我从他们的网站下载了 vsix 文件 templatepack vsix 当我双击它时 我收到一条消息 扩展清单无效 因此 我进入 Vi
  • 关于c中的表达式“&anArray”

    首先 我读到 array array array 0 只要 array 确实是一个数组 一切都会相同 所以我尝试 int main char ar a b c 0 printf argument ar s n ar printf argum