-2

整数配列の要素数を取得するマクロを使用し、main 関数で整数配列の数の正しい結果を取得できましたが、getData 関数を使用して、パラメータとして整数配列のポインタ。なぜこの間違った答えになったのか知りたいです。ありがとうございました!

次のように私のプログラムのコード:

#include <stdio.h>

#define LENGTHOFINTARRAY(intArray) ((int)(sizeof(intArray)/sizeof(int)))

int main (int argc, char *argv[])
{
    int a[] = {5,8,9,4,11,7,15,25,1};

    int getData(int *data);
    printf("%d\n", LENGTHOFINTARRAY(a));
    getData(a);

    return 0;
}

int getData(int *data)
{
    int i = 0;
    for(i; i < LENGTHOFINTARRAY(data); i++)
    {
        printf("%d, %d\n", LENGTHOFINTARRAY(data), data[i]);
    }

    return 1;
}

私のプログラムの結果は次のとおりです。

9

1、5

コンパイラとして gcc を使用しています。

4

3 に答える 3

0

あなたが定義したように

int a[] = {5,8,9,4,11,7,15,25,1};

    int getData(int *data);
    printf("%d\n", LENGTHOFINTARRAY(a));
    getData(a);

したがって、「getData(a)」を呼び出すと、最初の要素のアドレスを &a[0]; として渡していることになります。

あなたの関数内で getData() として

int getData(int *data)
{
    int i = 0;
    for(i; i < LENGTHOFINTARRAY(data); i++)
    {
        printf("%d, %d\n", LENGTHOFINTARRAY(data), data[i]);
    }

    return 1;
}

データは単なる整数へのポインタであり、a[0] のポインタまたはアドレスを取得します。そのため、マクロはデータを int へのポインターとして認識します。あなたが得た結果を引き起こします。

于 2013-04-23T10:51:19.807 に答える