我是C语言的新手,我遇到的问题是我真的不明白。我试图从另一个函数获取一个数组但是当我尝试提取信息时,它给了我以下警告:
隐含声明功能' getk_vector_calculation'在C99中无效 数组初始值设定项必须是初始化列表或字符串文字
以下是代码:
int k_vector_calculation(int krec[3])
{
...
krec [0] = l*u[0]+m*v[0]+o*[0] ;
krec [1] = l*u[1]+m*v[1]+o*[1] ;
krec [2] = l*u[2]+m*v[2]+o*[2] ;
return k_vector_calculation( &krec[3] )
}
int main ()
{
char krec[3] = getk_vector_calculation(&krec[3]);
...
}
答案 0 :(得分:2)
在您的main()
中,您调用的函数为getk_vector_calculation()
[不是k_vector_calculation()
] 且不是declared
或{{1在使用之前。
要解决此问题,
defined
头文件包含你的文件中#include
的声明。 [考虑getk_vector_calculation()
在其他文件中] getk_vector_calculation()
之前添加getk_vector_calculation()
的前瞻性声明,并在某处定义main()
。要了解有关隐式声明的更多信息,您可以查看此question。
编辑:
正如其他人所指出的那样,您的代码段中还有更多的问题。但由于问题标题仅限于getk_vector_calculation()
错误,IMO,这个答案应该是必要的。剩下的错误完全是一个不同的方面。
答案 1 :(得分:0)
在旧版本的C中,仍然可以调用尚未声明的函数,并且假设它们返回int
并且获取了未指定数量的参数。严格地说,在C99中,不允许在没有首先声明的情况下调用函数。
但是,在你的情况下,你试图调用一个名为getk_vector_calculation
的函数,但你已经定义了一个名为k_vector_calculation
的函数(开头没有get
)。
您还尝试使用函数初始化数组,这是不允许的(在C中,函数不能返回数组)。只需声明数组并将k_vector_calculation
作为单独的语句调用,例如:
int krec[3] = {0};
k_vector_calculation(krec);
请勿使用&krec[3]
,因为这指向无效的位置。使用&krec[0]
提供数组中第一个元素的地址,或者等同于krec
。注:另外,您声明了一个类型为char
的数组,但您的函数接受指向int
的指针,并且这些类型不兼容。您的函数也无条件地调用自身,因此如果剪切的代码没有有条件地返回,则保证无限递归。如果您的函数不需要调用自身,并且它不返回任何重要性的值,请将返回类型更改为void
以指示它没有返回值。
由于您使用的是C99,因此可以在函数的参数声明中使用static
关键字:
void k_vector_calculation(int krec[static 3])
{
// ... other code here ...
krec[0] = l*u[0]+m*v[0]+o*[0];
krec[1] = l*u[1]+m*v[1]+o*[1];
krec[2] = l*u[2]+m*v[2]+o*[2];
}
上面的代码声明了一个函数,该函数将的数组作为参数,至少 3 int
。
答案 2 :(得分:0)
这里有几个问题:
正如Sourav Ghosh指出的那样,您定义k_vector_calculation()
,然后尝试拨打getk_vector_calculation()
。你必须使用正确的名字。
你说你想要从另一个函数获得一个数组" - 你不能在C中做到这一点。
您没有显示k_vector_calculation()
的所有代码,但如图所示,此功能将永远调用自身,因为它最后做的是无条件地再次调用自身。如果你有一个递归函数,你需要给它一个终止的方法。
&krec[3]
是数组k
的第四个元素的地址,在此不希望您这样做,尤其是因为您的数组只包含3个元素。要引用数组本身,只需使用krec
。
char krec[3] = getk_vector_calculation(&krec[3]);
因多种原因无效。一,你不能用这种方式在C中初始化数组。二,你的论点见第(4)点。三,即使您可以在C中以这种方式初始化数组,您也可以尝试将未初始化的数组传递给函数,在其中初始化它,然后尝试使用结果初始化原始数组。这没有任何意义。
您还可以编写函数以使用int
数组,但在krec
中将main()
声明为char
的数组。
不清楚你想要k_vector_calculation()
做什么,但你不能像那样在C中返回数组。可能你想要做的只是将数组传递给函数,让函数工作,并且什么也不返回。例如:
#include <stdio.h>
void k_vector_calculation(int kvec[])
{
kvec[0] = 1;
kvec[1] = 2;
kvec[2] = 3;
}
int main(void)
{
int kvec[3];
k_vector_calculation(kvec);
for ( int i = 0; i < 3; ++i ) {
printf("kvec[%d] is %d.\n", i, kvec[i]);
}
return 0;
}