因为我是C编程的初学者。我试图在程序中返回一个数组,但无法正常工作。 这是代码
#include<stdio.h>
void main()
{
int x,y,z;
printf("Enter any three numbers separated with a single space : ");
scanf("%d %d %d", &x, &y, &z);
int * result = calc(x,y,z);
printf("The big number is %d \n The middle number is %d \n The small number is %d", result[0], result[1], result[2]);
}
calc(int x, int y, int z){
static int * result[3] = {0,0,0};
if(x>y && x>z){
result[0] = x;
if(y<z){
result[2] = y;
result[1] = z;
}
}else if(y>x && y>z){
result[0] = y;
if(x<z){
result[2] = x;
result[1] = z;
}
}else if(z>x && z>y){
result[0] = z;
if(y<x){
result[2] = y;
result[1] = x;
}
}
return result;
}
我搜索了很多东西,但是我听不懂或代码对我不起作用。
答案 0 :(得分:3)
在calc函数中-
div.logo {
// Will be parsed by angular-cli at build time
// and will be moved and reinjected in css as `dist/logo-r456dfq962ghz32.jpg`
background: url('/assets/images/logo.jpg');
}
是3个整数指针的数组。
整数数组应仅声明为
<img
class="background"
src="assets/images/logo@1x.jpg"
srcset="
assets/images/logo@1x.jpg 1366w,
assets/images/logo@2x.jpg 2732w,
assets/images/logo@3x.jpg 4098w
"
sizes="100vw"
/>
答案 1 :(得分:2)
#include<stdio.h>
int *calc(int x, int y, int z);
int main()
{
int x,y,z;
printf("Enter any three numbers separated with a single space : ");
scanf("%d %d %d", &x, &y, &z);
int * result = calc(x,y,z);
printf("The big number is %d \n The middle number is %d \n The small number is %d", result[0], result[1], result[2]);
}
int *calc(int x, int y, int z){ // first this the right way to declare it
static int result[3] = {0,0,0};
if(x>y && x>z){
result[0] = x;
if(y<z){
result[2] = y;
result[1] = z;
} // second you forgot to consider the else case like this :) i 've changed it on the other ifs too
else{
result[1] = y;
result[2] = z;
}
}
if(y>x && y>z){
result[0] = y;
if(x<z){
result[2] = x;
result[1] = z;
}else{
result[1] = x;
result[2] = z;
}
}
if(z>x && z>y){
result[0] = z;
if(y<x){
result[2] = y;
result[1] = x;
}else{
result[1] = y;
result[2] = x;}
}
return result;
}
答案 2 :(得分:2)
由于各种原因,您不能从函数中返回一个数组。通常更好的选择是将目标数组作为参数传递给函数(假设您知道数组的大小需要提前):
/**
* This version of calc doesn't return anything, so it's typed void
*/
void calc( int x, int y, int z, int *result, size_t result_size )
{
if ( x > y && x > z )
result[0] = x;
...
}
/**
* Unless your compiler documentation *explicitly* lists void main()
* as a valid signature, use int main( void ) instead.
*/
int main( void )
{
int result[3] = {0, 0, 0};
...
calc( x, y, z, result, sizeof result / sizeof result[0] );
...
}
除非您的函数弄乱了以0结尾的字符串(或数组内容中的某些其他哨兵值),否则您需要将数组大小作为单独的参数传递。数组表达式作为函数参数传递时会失去其“数组性质”,因此您需要单独跟踪其大小(sizeof arr / sizeof arr[0]
在指针上不起作用)。
答案 3 :(得分:1)
您的程序存在一些问题。
int * result = calc(x,y,z);
-但是calc
返回int
(因为未指定返回类型)
static int * result[3] = {0,0,0};
-result
是一个指向int的指针,大小为3
的数组。但是,您已经将它们分别初始化为0
。如果您了解这里发生的情况,这并不是问题。实际上,只需要一个简单的数组就可以了。
return result;
您将返回result
,但是函数calc
的返回类型默认为int。calc
函数没有原型。这是您的程序的外观:
#include<stdio.h>
int * calc(int, int, int);
void main()
{
int x,y,z;
printf("Enter any three numbers separated with a single space : ");
scanf("%d %d %d", &x, &y, &z);
int * result = calc(x,y,z);
printf("The big number is %d \n The middle number is %d \n The small number is %d", result[0], result[1], result[2]);
}
int *calc(int x, int y, int z){
static int result[3] = {0,0,0};
if(x>y && x>z){
result[0] = x;
if(y<z){
result[2] = y;
result[1] = z;
}
}else if(y>x && y>z){
result[0] = y;
if(x<z){
result[2] = x;
result[1] = z;
}
}else if(z>x && z>y){
result[0] = z;
if(y<x){
result[2] = y;
result[1] = x;
}
}
return result;
}
话虽如此,您的程序似乎无法按预期运行。看看下面的输出:
Enter any three numbers separated with a single space : 12 33 4
The big number is 33
The middle number is 0
The small number is 0
shell returned 69
Enter any three numbers separated with a single space : 100 3 4
The big number is 100
The middle number is 4
The small number is 3
shell returned 70
您可能想研究逻辑。
答案 4 :(得分:0)
calc
函数处理完后返回一个3个整数的数组。在这里,您有2个选择:
( {0,0,0} )
数组作为该函数的参数传递,因此result
也将在main
范围内被修改。calc
函数中初始化的数组。无论哪种方式,您都必须学习C如何管理动态分配的内存。
1)您声明一个指向所需数据类型的指针
int *result;
2)您为该指针分配内存(基本上是初学者,它将变成数组)
result = malloc(3 * sizeof(int));
您可以使用void* malloc(size_t memory_block)
(不会初始化内存)或void* calloc(size_t number_of_blocks, size_t block_size)
将所有内存设置为0
3)您可以使用calc
数组在result
函数中处理数据。
4)不管选择哪种方式(关于2),您的函数都应该返回一些内容。
如果将数组作为参数传递,则应返回void
,否则应返回int*
,其基本上转换为它返回一个指向int 的指针(并考虑到您分配的该指针的内存,现在它基本上返回一个数组)