0

2 つの値を取得するか、1 つの値を返す関数を作成しようとしています。だから私は関数を使用したいとき、私は思うアドレスである値を取得しました

int function (int a, int *b, *c){
    int value;
    value=a*2; 
    (*b)=value/10;
    (*c)=value%10;
}

int main(void){
    int val1,p1,p2,rest1,rest2;
    val1=150;
    function(val1,&p1,&p2);
    rest1=p1*2+p2;
    rest2=p2;
    printf("%d m %d end %d"rest1,rest2,&p2);
}

また、1つだけ返すことも考えています

int funct2(int a){
    int array [2];
    int b=(65*a)/100;
    int c=b%1000;
    array[0]=b;
    array[1]=c;
    return array;
}

int main(void)
{
    int a=18;
    int array[2];
    array=funct2(a);
}

どちらも機能しません。

では、どうすれば2つの値を取得するか、この2つの値を1つの値として取得する機能を構築できますか..助けてください

4

3 に答える 3

3

これは正しくありません:

printf("%d m %d end %d",rest1,rest2,&p2);

最後の引数 ,&p2int*( のアドレスp2) ですが、フォーマット指定子は%d. への変更:

printf("%d m %d end %d", rest1, rest2, p2);

2 つintの を返すには、 a を定義しstructて値で返すことができます。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct int_pair
{
    int division_result, modulus_result;
};

struct int_pair function (const int a)
{
    const int value = a * 2;
    struct int_pair result;

    result.division_result = value / 10;
    result.modulus_result  = value % 10;

    return result;
}

int main()
{
    struct int_pair p = function(150);
    printf("%d %d\n", p.division_result, p.modulus_result);
    return 0;
}

C99 の場合function()、戻り値に複合リテラルを使用できます。

struct int_pair function (const int a)
{
    const int value = a * 2;
    return (struct int_pair) { value / 10, value % 10 };
}

デモについては、 http://ideone.com/8PFtHqを参照してください。

于 2012-12-19T22:59:08.277 に答える
1

複数の値を返そうとすると、

int funct2(int a){
int array [2];
int b=(65*a)/100;
int c=b%1000;
array[0]=b;
array[1]=c;
return array;
}

未定義の動作であるローカル変数を返しています。これは、プログラムが有効であると見なされなくなったことを意味します。

から配列を渡すだけでmain、変更がメインに反映されます。

関数宣言は次のようになります。

void funct2(int *a, int size){ //size is the number of elements

main() からの呼び出しは次のようになります。

int a[2];
func(a, 2);
于 2012-12-19T22:46:39.610 に答える
0

最初の機能が修正されました:

void function1 (int a, int *b, int *c){
    int value;
    value=a*2;
    (*b)=value/10;
    (*c)=value%10;
}

int main(void){
    int val1,p1,p2,rest1,rest2;
    val1=150;
    function1(val1,&p1,&p2);
    rest1=p1*2+p2;
    rest2=p2;
    printf("%d m %d end %d\r\n",rest1,rest2,&p2);
}

2 番目の機能が修正されました:

int* function2(int a){
    int* array = (int*)malloc(2);
    int b=(65*a)/100;
    int c=b%1000;
    array[0]=b;
    array[1]=c;
    return array;
}

int main(void)
{
    int a=18;
    int* array;
    array=function2(a);

    //You can access array[0] and array[1]
    //...

    free(array);
}
于 2012-12-20T04:40:17.553 に答える