【问题标题】:Incrementing array variables inside and outside main function in C languageC语言主函数内外递增数组变量
【发布时间】:2019-06-15 15:24:03
【问题描述】:

之前的帖子已经描述了为什么数组名称不能递增。但.. 那么这两种不同的递增方式呢?

void f(int arr[]){
  printf("%d\n",*arr++);
  printf("%d\n",*arr);
}

int main(void){
  int arr[3]={1,2,3};
  f(arr);
  // COMPILE BY COMMENTING THESE TWO LINES BELOW AND ADDING THEM
  printf("%d\n",*arr++);
  printf("%d\n",*arr);
}

我无法弄清楚为什么它在一种情况下有效,而在另一种情况下无效。欢迎任何建议/指导。

【问题讨论】:

  • 你可以看到这个问题/答案stackoverflow.com/questions/16748150/…
  • @Max 不一样,与这里的问题无关。
  • @AnttiHaapala 我认为他与这个问题有关。
  • 我理解编译器提供数组作为语法糖的概念。我要问的是,就数组的特性而言,这不是一致的行为。它是否记录在 C 语言规范的任何地方?如果不是,那么它是一个错误吗?应该举报吗?

标签: c arrays


【解决方案1】:

因为void f(int arr[]) 只是void f(int *arr) 的语法糖。

f 函数内部,arr 只是一个指针,而不是一个数组。

阅读this SO article了解更多信息。

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2019-06-09
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多