1

ポインタが指すメモリの内容のブロックを表示する関数を使用しています。しかし、希望する出力が得られませんでした。これは初めてです。間違っている場合は修正してください。サイズ=3、要素= 1,2,3を入力すると、出力=1のみが得られます。

コードは次のとおりです。

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

void merge(int **arr1);

int main(void) {
    int size1;
    printf("Give me the size of first array\n");
    scanf("%d", &size1);

    int *arr1 = malloc(size1*sizeof(int));
    int *p1=arr1;
    printf("Give me the elements of first array\n");
    int index1;
    for(index1 = 0 ; index1<size1; index1++)
    scanf("%d", p1++);

    merge(&arr1);
    return;
}

void merge(int **arr1) {
    while(**arr1)  //**arr1 is the content of the passed array, if there 
                  // is an int in it, print that out and increment to next one
    {
        printf("%d", **arr1); // ** is the content and * is the address i think, right?
        *arr1++;
    }
}
4

1 に答える 1

3

あなたのmerge()コードは、配列がゼロで終了することを期待しています。呼び出し元のコードはそれを行っていないため、動作は指定されていません(コードを試したときにセグメンテーション違反が発生しました)。

もう1つの問題は、括弧を付ける必要があることです*arr1

(*arr1)++;

この変更を加えてコードを実行し、最後の要素にゼロを入力すると、コードは正常に実行されます。

于 2012-04-07T21:02:21.600 に答える