C函数解释

C函数解释,c,C,例如,为什么我们只把a放进去,而不把a[]放进去 如何从一个函数返回两个值,例如d和dx。当涉及数组时,仅传递数组的名称,接受数组的函数将指向相同的内存地址。它更像C++中的引用变量。 一次不能返回多个值。如果数据类型相似,则u可以复制到数组并将数组传回当涉及到数组时,仅传递名称,传递数组的地址,接受它的函数将指向相同的内存地址。它更像C++中的引用变量。 一次不能返回多个值。如果数据类型类似,则当您将数组传递给函数orizousa时,u可以复制到数组并将数组传递回,您传递的是数组的地址,而不是

例如,为什么我们只把
a
放进去,而不把
a[]
放进去


如何从一个函数返回两个值,例如
d
dx

当涉及数组时,仅传递数组的名称,接受数组的函数将指向相同的内存地址。它更像C++中的引用变量。
一次不能返回多个值。如果数据类型相似,则u可以复制到数组并将数组传回

当涉及到数组时,仅传递名称,传递数组的地址,接受它的函数将指向相同的内存地址。它更像C++中的引用变量。
一次不能返回多个值。如果数据类型类似,则当您将数组传递给函数
orizousa
时,u可以复制到数组并将数组传递回,您传递的是数组的地址,而不是实际副本(至少在这种情况下)。在C中,
a
实际存储数组第一个元素的地址。因此,您正在传递数组的第一个元素的地址<代码>*a将打印第一个元素的值。我们无法传递
a[]
,因为这是一个语法错误


要返回2个值,可以在main函数中声明一个变量,并将其作为参考变量传递给
orizousa
。然后您可以返回
d
并将dx1的值存储在参考变量中。

当您将数组传递给函数
orizousa
时,您传递的是数组的地址,而不是实际副本(至少在这种情况下)。在C中,
a
实际存储数组第一个元素的地址。因此,您正在传递数组的第一个元素的地址<代码>*a将打印第一个元素的值。我们无法传递
a[]
,因为这是一个语法错误

要返回2个值,可以在main函数中声明一个变量,并将其作为参考变量传递给
orizousa
。然后可以返回
d
,并将dx1的值存储在参考变量中

浮球g=猎户座(a)

INTA[]

a是整数类型的数组,其中变量名“a”表示数组a的引用

函数orizousa采用整数类型的引用参数。这就是为什么你必须通过a而不是a[]

如果要返回d和dx,只需向函数添加另一个引用即可

float g = orizousa(a);
浮球g=猎户座(a)

INTA[]

a是整数类型的数组,其中变量名“a”表示数组a的引用

函数orizousa采用整数类型的引用参数。这就是为什么你必须通过a而不是a[]

如果要返回d和dx,只需向函数添加另一个引用即可

float g = orizousa(a);

为什么我们只把“a”放进去,而不把[]放进去

当将数组作为参数传递给C中的函数时,我们必须只传递变量名,除非您只想传递数组的一个元素,在这种情况下,例如float g=orizousa(a[2])。但是orizousa函数接收一个数组,因此必须传递整个数组

如何返回2个值??

在C中,无法从函数返回2个值。但您可以做的是将变量作为引用传递。您可以这样做:

orizousa(int a[],float pReturn[])
{
  ....
  pReturn[0]=d;
  pReturn[1]=dx;

}
#包括
浮动猎户座(国际编号[]);
int main()
{
INTA[12];
int i;
printf(“从图形到apotelesma到apotelesma是一个完整的图形(我的简历:1os-2os-3os sintelestis-apotelesma):”;`在这里输入代码`

例如,(i=0;i为什么我们只把“a”放进去,而不把[]放进去??

当将数组作为参数传递给C中的函数时,我们必须只传递变量名,除非您只想传递数组的一个元素,例如,在这种情况下将是float g=orizousa(a[2])。但是函数orizousa接收一个数组,所以您必须传递整个数组

如何返回2个值??

在C中,无法从函数返回2个值。但您可以做的是将变量作为引用传递。您可以执行以下操作:

orizousa(int a[],float pReturn[])
{
  ....
  pReturn[0]=d;
  pReturn[1]=dx;

}
#包括
浮动猎户座(国际编号[]);
int main()
{
INTA[12];
int i;
printf(“从图形到apotelesma到apotelesma是一个完整的图形(我的简历:1os-2os-3os sintelestis-apotelesma):”;`在这里输入代码`

对于(i=0;i数组和指针是密切相关的。当您写入“g=orizousa(a)”时,您正在向函数传递数组a的第一个元素的地址副本

要从函数返回两个值,可以传递要更改的两个变量的地址,也可以将它们放入结构并返回结构

#include <stdio.h>

float orizousa(int n[]);

int main()
{
     int a[12];
     int i;
     printf("grapse tous sintelestes kai to apotelesma tis prwtis eksiswsis \n (me seira:1os-2os-3os sintelestis - apotelesma) :");`enter code here`

     for(i=0;i<=11;i++)
     { scanf(" %d",&a[i]);}

     float d, dx1, dx2, dx3;

     float g=orizousa(a, &d, &dx1, &dx2, &dx3);
     printf(" %f",g);

     return 0;
}

float orizousa(int a[], float *d, float *dx1, float *dx2, float *dx3)
{

    *d=a[0]*a[4]*a[8] + a[1]*a[5]*a[6] + a[2]*a[3]*a[7] - a[2]*a[4]*a[7] - a[1]*a[3]*a[8] - a[0]*a[5]*a[7] ;
    *dx1=a[9]*a[4]*a[8] + a[1]*a[5]*a[11] + a[2]*a[10]*a[7] - a[2]*a[4]*a[7] - a[1]*a[10]*a[8] - a[9]*a[5]*a[7] ;
    *dx2=a[0]*a[10]*a[8] + a[0]*a[5]*a[6] + a[2]*a[3]*a[11] - a[2]*a[10]*a[11] - a[1]*a[3]*a[8] - a[0]*a[5]*a[11] ;
    *dx3=a[0]*a[4]*a[11] + a[1]*a[10]*a[6] + a[9]*a[3]*a[7] - a[9]*a[4]*a[7] - a[1]*a[3]*a[11] - a[0]*a[10]*a[7] ;
}
称为

void foo( int* x, int* y ) { 
  *x = 1; *y = 2; 
} 
或者作为一个结构

int xx = 0;
int yy = 0;
foo(&xx,&yy);
要么作为参数传入

typedef struct {
  int x;
  int y;
} args;
称为

void foo(args* arg) { 
  args.x=1; 
  args.y=2; 
}
args foo() { 
  args arg = { 1,2 }; 
  return arg; 
}
或返回

args arg;
foo(&arg);
称为

void foo(args* arg) { 
  args.x=1; 
  args.y=2; 
}
args foo() { 
  args arg = { 1,2 }; 
  return arg; 
}

数组和指针是密切相关的。当您编写“g=orizousa(a)”时,您正在向函数传递数组a的第一个元素的地址副本

要从函数返回两个值,可以传递要更改的两个变量的地址,也可以将它们放入结构并返回结构

#include <stdio.h>

float orizousa(int n[]);

int main()
{
     int a[12];
     int i;
     printf("grapse tous sintelestes kai to apotelesma tis prwtis eksiswsis \n (me seira:1os-2os-3os sintelestis - apotelesma) :");`enter code here`

     for(i=0;i<=11;i++)
     { scanf(" %d",&a[i]);}

     float d, dx1, dx2, dx3;

     float g=orizousa(a, &d, &dx1, &dx2, &dx3);
     printf(" %f",g);

     return 0;
}

float orizousa(int a[], float *d, float *dx1, float *dx2, float *dx3)
{

    *d=a[0]*a[4]*a[8] + a[1]*a[5]*a[6] + a[2]*a[3]*a[7] - a[2]*a[4]*a[7] - a[1]*a[3]*a[8] - a[0]*a[5]*a[7] ;
    *dx1=a[9]*a[4]*a[8] + a[1]*a[5]*a[11] + a[2]*a[10]*a[7] - a[2]*a[4]*a[7] - a[1]*a[10]*a[8] - a[9]*a[5]*a[7] ;
    *dx2=a[0]*a[10]*a[8] + a[0]*a[5]*a[6] + a[2]*a[3]*a[11] - a[2]*a[10]*a[11] - a[1]*a[3]*a[8] - a[0]*a[5]*a[11] ;
    *dx3=a[0]*a[4]*a[11] + a[1]*a[10]*a[6] + a[9]*a[3]*a[7] - a[9]*a[4]*a[7] - a[1]*a[3]*a[11] - a[0]*a[10]*a[7] ;
}
称为

void foo( int* x, int* y ) { 
  *x = 1; *y = 2; 
} 
或者作为一个结构

int xx = 0;
int yy = 0;
foo(&xx,&yy);
要么作为参数传入

typedef struct {
  int x;
  int y;
} args;
称为

void foo(args* arg) { 
  args.x=1; 
  args.y=2; 
}
args foo() { 
  args arg = { 1,2 }; 
  return arg; 
}
或返回

args arg;
foo(&arg);
称为

void foo(args* arg) { 
  args.x=1; 
  args.y=2; 
}
args foo() { 
  args arg = { 1,2 }; 
  return arg; 
}

阅读我的答案。它解释了在C中幕后发生的事情。应该澄清你的疑问。如果通过地址传递,你可以返回一个结构,或者修改输入参数,但是小心使用它,因为它涉及指针。阅读我的答案。它解释了在C中幕后发生的事情。应该澄清你的疑问。你可以返回一个结构,或者修改如果通过地址传递,则输入参数,但要小心使用,因为它涉及指针。我只是告诉他方法。没有编写完整的代码。再次,如果要返回两个浮点类型的值,如何可以