【问题标题】:Why strings are permitted while arrays are not in this code?为什么在此代码中没有数组时允许使用字符串?
【发布时间】:2015-07-07 18:11:22
【问题描述】:
#include<stdio.h>
void function1(){}
int main(void)
{
  function1(1,0.45,'b',"I am trying");
  function1();
  return 0;
}

这编译得很好。 但是下面显示的是

错误:先在function1中使用arr ....

请注意,我使用的是code::blocks IDE,并以 .c 扩展名保存了该文件。

#include<stdio.h>
void function1(){}
int main(void)
{
   function1(1,0.45,'b',"I am trying",arr[12]);
   function1();
   return 0;
}

对不起,我把它称为数组是个错误。但是{1,2,3,4} 这是一个你会同意的数组..但这也行不通。是bug还是什么?

【问题讨论】:

  • arr 声明在哪里?
  • 那不是数组...
  • GCC 默认编译标志允许 C90 语法。空括号表示“采用未指定的固定数量的参数”。
  • 您已定义 function 没有参数,但您已声明它采用固定但未指定的数字和类型) 的论点。向它传递参数是无效的,但编译器不需要诊断错误;行为未定义。这样做的能力是不幸的历史倒退。将定义改为void function1(void) { },编译器会诊断错误。
  • @KeithThompson:错字,是的,1989 年。你差点吓到我了,我把你的名字读错了肯。 :-)

标签: c string argument-passing


【解决方案1】:

第二种情况,

 function1(1,0.45,'b',"I am trying",arr[12]);

arr[12] 是一个变量,arr 本身没有定义,至少是一个数组。

在C语言中,你需要在使用它之前定义一个变量。

FWIW,

function1(1,0.45,'b',"I am trying");

有效,因为

  • 1int 文字
  • 0.45double 文字
  • 'b'char 文字
  • "I am trying" 是字符串文字

它们都不是变量

【讨论】:

  • 很好 ...因为字符串传递不是编译错误,所以数组不应该是正确的???好的,我同意我犯了一个错误......{1,2,3,4} 这也是一个数组,对。而不是 arr 放这个......然后也是编译错误
  • @DebashishSaha {1,2,3,4} 是一个初始化列表,而不是一个数组本身。
  • 有 2 种方式来定义一个数组 1.sijmply 把所有的东西放在大括号里 2.define 变量比如 int arr[10]
  • @DebashishSaha 我建议立即停止阅读这本书。
  • @DebashishSaha FWIW,在复合文字的帮助下,在 c99 之上,{1,2,3,4} 可以解释为一个数组,但这完全是另一回事。
猜你喜欢
  • 1970-01-01
  • 2011-05-25
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 1970-01-01
  • 2021-02-23
相关资源
最近更新 更多