热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

多维数组的衰减作为函数参数

如何解决《多维数组的衰减作为函数参数》经验,为你挑选了2个好方法。

我知道这个例子:

void foo(int a[])// or a[x]

将由编译器考虑如下:

void foo(int *a)

但我不知道,我没有发现编译器看到的多维数组是怎样的

例如:

void foo(int a[3][4])

它会是这样的吗?

void foo(int (*a)[4])

或者类似的东西?

void foo(int **a)

dbush.. 22

当数组衰减时,它会转换为指向第一个元素的指针.在的情况下int a[3][4],a是一个数组int[4],所以指向int [3][4]has类型的元素的指针int (*)[4].

所以这:

void foo(int a[3][4])

是相同的:

void foo(int (*a)[4])


Weather Vane.. 6

在不知道除最外层之外的每个维度的情况下,编译器不能索引传递给函数的多维数组.

因此,对于1D阵列,不需要长度:

void foo(int a[]);

void foo(int a[3]);

尽管有误导性,但它们是相同的,因为C不关注数组的长度:这是程序员正确的.

对于一个二维数组的内部尺寸必须是正确的,或者编译器将不知道如何建立索引.所以

void foo(int a[][3]);

很好,但是

void foo(int a[][]);

无法编码,和

void foo(int a[42][3]);

是好的,但不必要,而不是限制,因为所有编译器需要的是有关如何索引的信息,而不是多少.



1> dbush..:

当数组衰减时,它会转换为指向第一个元素的指针.在的情况下int a[3][4],a是一个数组int[4],所以指向int [3][4]has类型的元素的指针int (*)[4].

所以这:

void foo(int a[3][4])

是相同的:

void foo(int (*a)[4])



2> Weather Vane..:

在不知道除最外层之外的每个维度的情况下,编译器不能索引传递给函数的多维数组.

因此,对于1D阵列,不需要长度:

void foo(int a[]);

void foo(int a[3]);

尽管有误导性,但它们是相同的,因为C不关注数组的长度:这是程序员正确的.

对于一个二维数组的内部尺寸必须是正确的,或者编译器将不知道如何建立索引.所以

void foo(int a[][3]);

很好,但是

void foo(int a[][]);

无法编码,和

void foo(int a[42][3]);

是好的,但不必要,而不是限制,因为所有编译器需要的是有关如何索引的信息,而不是多少.


"C不关注数组的长度" - 这仅适用于函数参数的情况,一般情况下不适用
@Wilson必须注意实际(非函数参数)数组的大小,例如使`sizeof`运算符给出正确的大小.
推荐阅读
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
author-avatar
拍友2502905977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有