按值传递 typedef(固定大小)数组

2023-12-02

我很难理解typedef数组的模式。

typedef char Char10[10];
void fun (Char10 a)  // not passing reference (interested in pass by value)
{
  if(typeid(Char10) == typeid(char*))
    throw 0;  // <--- never happens
}

int main ()
{
  char a[10];  fun(a);  // ok
  char b[11];  fun(b);  // why works ?
}

为什么按值排列的数组的不同大小被接受fun() ? Are char[10] and char[11]不是不同类型?

Edit:对于那些说它衰减为指针的人,请参阅我编辑的代码。char[10] and char*似乎不匹配。


在这两种情况下,数组decay到指针类型,你的函数是actually this:

void fun (char *a); 

这就是它起作用的原因。

我想强调的是void fun(char*)void fun(char[10]). The 10根本没有任何区别。实际上,10是如此不重要和无用,你甚至可以完全省略它:

void fun (char a[]); //exactly same as `char*` or `char[10]`.

这意味着,all以下函数声明是exactly same:

void fun(char a[10]);   
void fun(char a[]);  //10 is unimportant in the above declaration
void fun(char *a);   //same as above two declarations!

希望能澄清您的疑问。


但是,如果你这样写:

void fun (Char10 & a) ; //note &

那么,它实际上是这样的:

void fun (char (&a)[10]) ; //equivalent!

Then fun(b)无法编译,就像现在一样fun将只接受大小恰好为 10 的数组。并且该数组将not衰变到pointer,它将被通过参考.

char a[10], b[11];
char *c=new char[10];
fun(a); //okay
fun(b); //error - type mismatch due to size of the array
fun(c); //error - type mismatch due to c being pointer.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按值传递 typedef(固定大小)数组 的相关文章

  • Qt 和 Sqlite 示例

    我正在寻找一些使用 Qt 的示例代码 它是带有 Sqlite 驱动程序的 SQL 模块 我需要示例的主要原因是我之前有 Qt 数据库接口的经验 并且 Sqlite 在字段类型方面有一些奇怪的行为 类型是按字段存储的 而不是按列存储的 The
  • -ffast-math 可以安全地用于典型项目吗?

    在回答我建议的问题时 ffast math 有评论指出这是危险的 我个人的感觉是 在科学计算之外 是可以的 我还假设严肃的金融应用程序使用定点而不是浮点 当然 如果你想在你的项目中使用它 最终的答案是在你的项目上测试它 看看它有多大影响 但
  • 全局变量不好

    好吧 读完这篇文章和一些示例后 我仍然不清楚全局变量的含义 那么你的类中的私有变量是全局的吗 http www c2 com cgi wiki GlobalVariablesAreBad http www c2 com cgi wiki G
  • StackExchange Redis 删除所有以以下开头的键

    我有一个格式的密钥 Error 1 Error 24 Error 32 Using StackExchange Redis 我该怎么办KeyDelete在与格式匹配的所有键上Error 在另一个答案中我看到了 LUA 脚本 EVAL ret
  • 创建一个 int 类型的随机数组。爪哇

    我需要创建一个随机的 int 数组 并按我自己的类对其进行排序 这是我制作数组的地方 public class MyProgram9 public static void main String args int list new int
  • 二叉树和快速排序?

    我有一个家庭作业 内容如下 别生气 担心 我是not请你帮我做作业 编写一个程序 通过使用二分查找的快速排序方法对一组数字进行排序 树 推荐的实现是使用递归算法 这是什么意思 到目前为止 这是我的解释 正如我在下面解释的那样 我认为两者都有
  • 图片框、双击和单击事件

    我有一个奇怪的问题 我有一个图片框双击事件以及单击事件 问题是即使我双击该控件 也会引发单击事件 如果我禁用单击事件 则双击事件正在工作 这个问题已经在这里讨论过 https stackoverflow com questions 1830
  • .Net 支持柯里化泛型吗?

    假设我们有一个嵌套的泛型类 public class A
  • 将两个垂直滚动条相互绑定

    我在控件中有两个 TextBox 并且它们都有两个 VerticalScrollBar 我想在它们之间绑定 VerticalScrollBars 如果一个向上 第二个也会向上等等 如果可以的话我该怎么做 Thanks 不是真正的绑定 但它有
  • 对列表中的一系列整数求和

    假设我有一个这样的列表 List
  • 批量插入,asp.net

    我需要获取与会员相对应的 ID 号列表 在任何给定时间处理的数量可能在 10 到 10 000 之间 我可以毫无问题地收集数据 解析数据并将其加载到 DataTable 或任何内容 C 中 但我想在数据库中执行一些操作 将所有这些数据插入表
  • 为什么 C# 中的命名空间允许循环依赖?

    在 c 中 您可以在文件 a cs 其命名空间为 MyApp A 中拥有一条语句 using MyApp B 而文件 b cs 其名称空间为 MyApp B 已经包含该语句 using MyApp A 如果类似的依赖关系存在于不同的 dll
  • 如何处理文件名中的空格

    我正在尝试迭代本地目录中的文件 foreach string name in Directory GetFileSystemEntries path FileAttrtibutes att File GetAttributes name 文
  • 模板类中模板方法专门化的 clang 自动返回类型错误?

    试图理解另一个问题 https stackoverflow com questions 38054055 clang fails to compile template function with auto return type insi
  • 用 std::generate_n 填充 std::map

    我想填写一个std map using std generate n但无法让它发挥作用 我尝试过的是这样的事情 unsigned number of pairs 5 std map
  • Microsoft Visual Studio 2017 中的 wxWidgets 设置

    我花了大约 20 个小时试图弄清楚如何在 Microsoft Visual Studio 2017 中设置 wxWidgets 我遵循 https wiki wxwidgets org Microsoft Visual C 2B 2B Gu
  • TCP/IP 传输期间套接字数据损坏

    当我通过预连接的 TCP IP 套接字发送数据时 我发现数据已损坏 Example Station1 正在向 Station2 发送数据 我已经在发送之前 在 S1 和接收之后 在 S2 打印了数据 以下是消息 S1 发送的数据是ACKS2
  • C 中的 2 个字符要短

    我有2个字符 Char 128和查尔2 如何将这些字符转为 Short640 in C 我试过了 unsigned short getShort unsigned char array int offset short returnVal
  • C# 使用 .Equals() 比较两个 double

    我使用 ReShaper 当我用 比较两个双精度值时 它建议我应该使用 Math 具有公差的 ABS 方法 看 https www jetbrains com help resharper 2016 2 CompareOfFloatsByE
  • 在派生类中访问基类变量

    class Program static void Main string args baseClass obj new baseClass obj intF 5 obj intS 4 child obj1 new child Consol

随机推荐

  • 无法从 Android 设备在 Facebook 页面中看到类似选项

    I am trying to open a facebook page from my app in both android and ios In ios the page shows LIKE button but in android
  • 使用参数化 SqlCommand 是否可以使我的程序免受 SQL 注入的影响?

    我知道SQL注入是相当危险的 现在 在我的 C 代码中 我使用以下命令编写参数化查询SqlCommand class SqlCommand command command CommandText SELECT FROM Jobs WHERE
  • Android 列表视图的 Bubble Chat 问题

    嗨 我遇到了一个奇怪的麻烦 我没有得到气泡 例如你的消息在右边 我的消息在左边 当我调用notifydatachanges时 它会删除所有的气泡 请指导我 下面是代码 private final Handler mHandler new H
  • 如何使用 ASP.Net MVC 路由来路由图像?

    我将网站升级为使用传统 ASP Net Web 表单中的 ASP Net MVC 我使用 MVC 路由将对旧 aspx 页面的请求重定向到新的控制器 操作等效项 routes MapRoute OldPage oldpage aspx ne
  • SwiftUI:访问 macOS 上的特定场景 ViewModel

    在这个简单的示例应用程序中 我有以下要求 有多个窗口 每个窗口都有自己的ViewModel 切换Toggle在一个窗口中应该not更新另一个窗口的 我还希望能够通过菜单切换 就目前而言 前两点是not鉴于 最后一点是有效的 我已经知道当我移
  • django heroku 媒体文件 404 错误

    我最近在 Heroku 上部署了一个 Django 应用程序 并上传了一些媒体文件 一切似乎都工作正常 直到昨天 当我尝试再次访问该应用程序时 发现它给出了 404 错误 有什么想法为什么会发生这种情况吗 设置 py import os B
  • ASP.Net 2012 使用 jQuery 进行非侵入式验证

    我正在使用 Visual Studio 2012 我创建了一个空 ASP Net Web 应用程序 当我尝试添加传统验证器控件到新页面 出现这个错误 WebForms UnobtrusiveValidationMode 需要 jquery
  • oracle sql在计数时不是按表达式分组[重复]

    这个问题在这里已经有答案了 我正在尝试运行以下查询来计算过去 6 个月内转诊患者的医生数量 SELECT count local doc providerno NumberofReferals LOCAL DOC FULLNAME FULL
  • Javascript 世界时区与 GMT 的时差计算器

    我希望有人能告诉我定期更新时区数据库的方向 我找到了一个 但抱歉我不记得它来自哪里 但是随着当前 GMT 时钟变化的快速临近 我担心我的所有数据都会不正确 即从英国到纽约的时差将从落后 5 小时变为 6 小时落后几个小时 任何有关此事的帮助
  • 包含相当于 SQL Server 中的 Like

    当我运行此查询时 Select from Table1 Where Column1 Like aaa 3 Result Select from Table1 Where Column1 Like a 3 Result Select from
  • PowerShell 的 ConvertFrom-SecureString -key 的安全性如何

    我有一个模块 其中包含一些带有一些私有数据的字符串 这些数据应该很难获得 但会经常更改 我需要将此脚本放在各种机器上 这些机器可能会访问它 并且代码可能会被不应该拥有用于导出输出的信息的人读取 我真的很担心不时变化的字符串 因此我正在考虑创
  • PyOpenGL 如何导入 obj 文件?

    import pygame import OpenGL from pygame locals import from OpenGL GL import from OpenGL GLU import import pywavefront sc
  • javascript highchart 照片幻灯片

    我正在使用 javascript 库 highchart 创建可视化图表 我用一些虚假数据创建了图表 我想知道如何使用图表数据触发图像幻灯片 因此 如果我将鼠标悬停在图表中某个点的数据上 相应的图像将水平滑动到页面中心 这是到目前为止我的一
  • 如何计算负数的平方根?

    我正在尝试使用以下代码从负数的平方根创建复数 include Math z Complex sqrt 9 但它会产生这个错误 Math DomainError Numerical argument is out of domain sqrt
  • 在 NetworkX 中重现相同的图

    我想改进我的图表 存在以下问题 如何创建一致的图 图本身并不一致 每次我执行 运行代码时 它都会生成不同的图像 不一致的图表显示在 url 中 如何自定义整个图表 图片的大小并使其更大 如何为对象 a 设置永久位置 以便它始终出现在第一个
  • 为登录 Facebook 的 Android 应用程序编写测试

    我的 Android 应用程序使用FacebookSDK用于登录 这是第一个屏幕 除非登录 否则您无法执行任何操作 我想写一些Espresso在 Greenhouse 持续集成服务器上运行的测试 我搜索了一下 发现 iOS 上有 FBSDK
  • 如何在 MVC 中创建通用视图模型?

    我想在 MVC 中使用视图模型而不是使用 viewbag 有没有一种方法可以创建一些在所有控制器之间共享的通用视图模型 然后在我的视图中使用它 为此我需要什么样的代码 我想也许在基本控制器中创建一些东西 那可能吗 我相信在控制器和视图之间传
  • 复制失败:stat /var/lib/docker/tmp/docker-builder076499369/files/nginx.conf:没有这样的文件或目录

    我正在运行以下版本的 docker ce Server Docker Engine Community Engine Version 18 09 5 API version 1 39 minimum version 1 12 Go vers
  • r devtools test() 错误,但测试 test_file() 是否有效

    我正在构建的包中有一个函数 它将十六进制代码分配给全局环境以供分析师使用 optiplum lt function assign x optiplum value rgb red 129 green 61 blue 114 maxColor
  • 按值传递 typedef(固定大小)数组

    我很难理解typedef数组的模式 typedef char Char10 10 void fun Char10 a not passing reference interested in pass by value if typeid C