gpt4 book ai didi

c++ - C 函数参数中的数组语法与指针语法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:11 27 4
gpt4 key购买 nike

我了解数组如何退化为指针。我明白,对于编译器来说,这是:

void foo(int *arg1);

100% 等同于此:

void foo(int arg1[]);

是否应该优先选择一种风格?我想保持一致,但我很难证明这两个决定是正确的。

虽然int main(int argc, char *argv[])int main(int argc, char **argv)是一样的,但是前者好像更常见(如果我错了请纠正我)。

最佳答案

我会建议反对使用[]函数参数的语法。

支持使用 [] 的一个论据是它以一种 self 记录的方式暗示指针应该指向不止一件事。例如:

void swap(int *x, int *y)
double average(int vals[], int n)

但为什么是char *总是用于字符串而不是 char [] ?我宁愿保持一致并始终使用 * .

有些人喜欢const他们可能做的一切,包括按值传递参数。使用 [] 时的语法(仅在 C99 中可用)不太直观并且可能不太为人所知:

const char *const *const wordsconst char *const words[const]

尽管我确实认为最终的 const无论如何都是矫枉过正。

此外,数组衰减的方式并不完全直观。特别是 not applied recursively ( char words[][] 不起作用)。尤其是当你开始更间接地投入时,[]语法只会引起困惑。 IMO 最好始终使用指针语法,而不是假装将数组作为参数传递。

更多信息:http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr#aryptrparam .

关于c++ - C 函数参数中的数组语法与指针语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com