【问题标题】:What Is The Difference Between char**x and char*x[] [duplicate]char**x 和 char*x[] 之间有什么区别 [重复]
【发布时间】:2012-10-22 13:16:49
【问题描述】:

可能重复:
In C, are arrays pointers or used as pointers?

在 C++ 中,默认的 main 函数可以有 char* argv[] 之类的参数。它与 char** 和 char* argv[100] 有什么区别?

【问题讨论】:

    标签: c++


    【解决方案1】:

    函数参数没有区别。在其他情况下,第一个声明一个指针,第二个声明一个数组。

    【讨论】:

    • 有区别。在char* [100] 你有更多信息。
    • @J.N.不在函数参数中。在函数参数中,如果最右边的类型是数组,则忽略大小。
    • @J.N.这两个声明出现在函数声明中时没有区别。
    • 确实,我错了,尽管消除歧义会很有用。差异仅适用于数组引用。
    【解决方案2】:

    char** 是一个指向char 的指针。

    第二个char *argv[100] 是一个指向字符的指针数组。

    但是,当您将数组传递给函数时,它们衰减为指针。

    【讨论】:

    • 衰减?像僵尸一样腐烂变老并开始失去身体部位?
    • 哈哈,这不是行尸走肉 :) 这只是使用的术语。
    • 好吧,如果你在 C++ 中使用 C 数组和 char*,你在心理上就是个僵尸。
    • @RichardChambers 见this explanation
    • @daknøk,我个人认为在 C++ 中加入一点 C 可以增加风味和维生素,同时还可以保证工作安全!如果僵尸没有大脑,就必须爆头杀死僵尸,这又是什么意思?
    【解决方案3】:

    char** argv:要引发与 char* argv[100] 相同的行为,您必须动态分配空间来存储 char 指针。例如:(*argv) = new char[100];

    双指针是 C++ 独有的一种非常灵活的数据类型,它可以带来疯狂的速度和疯狂的错误。通常,如果您知道数组的大小,最好避免动态内存分配。

    【讨论】:

    • 它们不是 C++ 独有的 ;)。例如,您可以在 C 和 Pascal 中使用它们。
    • 我认为这是一个笑话帖子,不应该被认真对待。
    • 啊,我想该睡觉了,我在句子的第一部分停了下来。
    • 再来点咖啡!!或者红牛。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2012-08-14
    • 2014-11-07
    • 1970-01-01
    • 2011-05-10
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多