[方括号] 和 *星号之间的区别

2023-11-26

如果你编写一个 C++ 函数,例如



void readEmStar( int *arrayOfInt )
{
}
  

与 C++ 函数相比,例如:



void readEmSquare( int arrayOfInt[] )
{
}
  

使用 [方括号] 与 *asterisk 之间有什么区别?假设它们与编译器等效,是否有人有关于哪种更好的风格指南?

为了完整起见,举一个例子

void readEmStar( int *arrayOfInt, int len )
{
  for( int i = 0 ; i < len; i++ )
    printf( "%d ", arrayOfInt[i] ) ;
  puts("");
}


void readEmSquare( int arrayOfInt[], int len )
{
  for( int i = 0 ; i < len; i++ )
    printf( "%d ", arrayOfInt[i] ) ;
  puts("");
}

int main()
{
  int r[] = { 2, 5, 8, 0, 22, 5 } ;

  readEmStar( r, 6 ) ;
  readEmSquare( r, 6 ) ;
}

当你使用类型时char x[]代替char *x 没有初始化,你可以认为它们是相同的。您不能将新类型声明为char x[]无需初始化,但您可以接受它们作为函数的参数。在这种情况下,它们与指针相同。

当你使用类型时char x[]代替char *x 与初始化,它们完全100%不同。


如何操作的示例char x[]不同于char *x:

char sz[] = "hello";
char *p = "hello";

sz实际上是一个数组,而不是一个指针。

assert(sizeof(sz) == 6);
assert(sizeof(sz) != sizeof(char*)); 
assert(sizeof(p) == sizeof(char*));

如何操作的示例char x[]是相同的char *x:

void test1(char *p)
{
  assert(sizeof(p) == sizeof(char*));
}

void test2(char p[])
{
  assert(sizeof(p) == sizeof(char*));
}

传递给函数的编码风格:

你做哪一个并不重要。有些人更喜欢char x[]因为很明显您想要传入一个数组,而不是单个元素的地址。

通常这已经很清楚了,因为您将有另一个参数来表示数组的长度。


进一步阅读:

请参阅这篇文章标题数组与指针不一样!

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

[方括号] 和 *星号之间的区别 的相关文章

随机推荐

  • 活动页面和背景页面

    由于 Chrome 扩展文档中没有明确的解释 所以我来这里寻求帮助 我了解到 背景页面基本上是为了延长扩展的生命周期而发明的 旨在保存值或保持 引擎 在后台运行 这样就没有人注意到它 因为一旦您单击扩展程序的图标 您就会看到他们所说的 弹出
  • 意外异常:SQLSTATE[HY000] [1045] 用户 ****@'localhost' 的访问被拒绝(使用密码:YES)

    一位老同事交给我一个申请来管理 但是 每当我尝试运行它时 我都会收到此错误 请任何帮助都可以 有时访问被拒绝异常错误 因为您的 mysql 凭据无效 其次 根据我的经验 我观察到这种情况也会发生 因为您没有为数据库连接设置密码 例如 pri
  • 如何从shared_ptr调用私有析构函数?

    我有一个resource manager类维护一个std vector
  • WCF 服务 netTCP 绑定

    我想使用 netTCPbinding 所以我改变了我的网络配置 如下所示 我遇到这个错误 找不到与绑定 NetTcpBinding 的终结点的方案 net tcp 相匹配的基地址 注册的基地址方案是 http 如何解决这个问题
  • 如何从 NodeJS 服务器向客户端发送信息?

    例如 我想向客户端发出信号 表明通过 POST 方法以 HTML 表单发送的用户名已存在于我的数据库中 我知道如何使用 body parser 恢复 POST 数据 并且知道如何在 MySQL 数据库中查找它 我知道我可以使用 Ajax 直
  • 如何在 Java 中获得 UNIX 正常运行时间?

    在 Java 中获得 UNIX 正常运行时间的最佳方法是什么 是否有我可以使用的标准 Java 库 函数 或者我应该使用 Runtime 的 exec 或 ProcessBuilder 来执行 正常运行时间 谢谢 你可以阅读 proc up
  • Azure Web 角色上的 WaitHandleCannotBeOpenedException 以 Task.Wait() 开头

    以下 Web 角色入口点返回后会导致引发以下异常 public class WebRole RoleEntryPoint public override bool OnStart Task Run gt Anything can be he
  • javascript 错误:无法在“文档”上执行“elementsFromPoint”:提供的双精度值是非有限的

    我最近将我的 chrome 版本更新到最新版本 即79 0 3945 130 Official Build 64 bit 并从下载兼容的 chromedriverhere 我已经开始面临这个错误了 在详细调试时我发现Select导致问题的类
  • python csv只写入某些字段名称,而不是全部

    我一定错过了一些东西 但我不明白 我有一个 csv 它有 1200 个字段 我只对 30 感兴趣 你如何让它发挥作用 我可以读 写整个 shebang 这没关系 但我真的很想写出 30 我有一个字段名列表 我有点修改标题 我将如何翻译下面以
  • 如何清除点击时的数据列表输入?

    我在 Lit Element Web 组件中有这个数据列表
  • C++:如何将字符串拆分为大小均匀的较小字符串?

    在 C 中 如何将字符串拆分为大小均匀的较小字符串 例如 我有一个字符串 012345678 并希望它将它分成 5 个较小的字符串 这应该返回类似 01 23 45 67 8 的内容 我无法确定较小字符串的长度 在上一个示例中 原始字符串的
  • 调整织物矩形大小而不调整文本框大小

    In this jsFiddle我有一个包含矩形和文本框的结构组 我需要能够在不缩放文本的情况下缩放矩形 因此我尝试在选择组时取消分组 并在清除选择时再次分组 还 矩形和文本框被分组以便能够将它们一起移动 文本需要可编辑 文本需要位于矩形的
  • MySQL 不更新 information_schema,除非我手动运行 ANALYZE TABLE `myTable`

    我需要获取表 InnoDB 的最后一个 id 主键 为此我执行以下查询 SELECT SELECT AUTO INCREMENT FROM information schema TABLES WHERE TABLE SCHEMA mySch
  • 角度键值管道排序属性/按顺序迭代

    使用角度时keyvalue管道来迭代对象的属性 如下所示 div item key item value div 我遇到过一个问题 即属性未按预期顺序迭代 此评论表明我不是唯一遇到此问题的人 如何在 Angular 中使用 ngFor 循环
  • EditText 文本属性下方有下划线

    我想更改编辑文本下方的蓝色 我不知道它是什么属性 我尝试为其使用不同的背景颜色 但它不起作用 我在下面附上了一张图片 实际上 以编程方式设置 EditText 的下划线颜色相当容易 只需一行代码 设置颜色 editText getBackg
  • 以原子方式标记并返回数据库中的一组行

    我正在编写一个后台服务 需要处理一系列作业 这些作业作为记录存储在 sqlserver 表中 该服务需要找到最旧的 20 个需要工作的工作 where status new 标记它们 set status processing 运行它们 然
  • java.lang.ClassNotFoundException:WebDriver API

    我下载了selenium java 2 0a5 zip http code google com p selenium downloads list 并运行以下代码 package org openqa selenium example i
  • .gitattributes 和文件的单独合并策略

    我的 网络 应用程序有一个主分支和一个测试分支 这些项目几乎相同 除了一个用于设置应用程序的文件 例如 setup 每当我将一个分支合并到另一个分支时 我希望该分支保留其安装版本 也就是说 git 不应尝试合并对该文件的更改 我跟着Pro
  • 如何将控制台插入 pyGame 窗口?

    我正在制作一个文字冒险游戏 我想要 pyGame 动画和插图以及 HUD 我怎样才能插入这个控制台 Thanks 我很确定那是不可能的 如果您想要 Pygame 屏幕中的控制台 那么您必须编写自己的控制台 或者找到其他人编写的控制台 例如h
  • [方括号] 和 *星号之间的区别

    如果你编写一个 C 函数 例如 void readEmStar int arrayOfInt 与 C 函数相比 例如 void readEmSquare int arrayOfInt 使用 方括号 与 asterisk 之间有什么区别 假设