0

C または C# で配列が引数として関数に渡される場合、関数は引数に対して動作しますか? ポインターのように?

4

5 に答える 5

2

この回答は C のみです

はい、それは絶対にできます。関数は配列をポインタとして扱います

例えば:

#include <stdio.h>

#define SIZE 10

void anyfunction(int array[]){  
    int i=0;

    for(i=0;i<SIZE;i++){
        array[i] = i;
    }
}

int main(){
    int i=0;
    int numbers[SIZE] = {0};

    anyfunction(numbers);

    for(i=0;i<SIZE;i++){
        printf("%d ",numbers[i]);
    }

    printf("\n");
    return 0;   
}

出力:

Notra:Desktop Sukhvir$ ./test
0 1 2 3 4 5 6 7 8 9 
于 2013-11-06T13:46:29.283 に答える
1

はい、できますが、配列はポインターに崩壊します。

式に現れる array-of-T 型の左辺値 [質問 2.5を参照] は、(3 つの例外を除いて) 最初の要素へのポインターに崩壊します。配列は「変更可能な左辺値」ではないため、結果のポインターの型は T へのポインターです。

(例外は、配列が sizeof または & 演算子のオペランドであるか、文字配列のリテラル文字列初期化子である場合です。)

于 2013-11-06T13:46:04.880 に答える
1

配列型の式は、すべてではありませんがほとんどのコンテキストで、単項演算子&またはsizeof演算子のオペランドでない限り、配列オブジェクトの最初の要素へのポインターに暗黙的に変換 (「減衰」) されます。
推奨される読書: CFAQ-Arrays and Pointers

于 2013-11-06T13:47:27.523 に答える
1

C のコンテキストでは、配列名はベース アドレスを指します。

4番目a[10]のオブジェクトを参照するとします。つまりa[3]、これは同等のメソッド*(a+3)です。

したがって、配列をポインターとして使用する方法がわかります。

配列名を引数として関数に渡すと、実際には配列のベース アドレスが渡されます。

于 2013-11-06T13:53:22.350 に答える
0

そのとおり。その配列を配列ビヘイビアーとして関数で使用できます。

于 2013-11-06T13:52:28.723 に答える