2016-03-31 5 views
3

制限されたポインタが私にルールとして説明されました。ポインタによってアクセスされ、どこでも変更されたオブジェクトは、ポインタによってのみアクセスされます。それで、以下はうまくいきませんよね?修飾された修飾されたポインタを関数に渡すことはできますか?

void agSum(int * restrict x, int n){ 
    for(int i=0; i<n-1; i++) x[i+1] += x[i]; 
} 

int SumAndFree(int * restrict y, int n){ 
    agSum(y); 
    printf("%i",y[n-1]); 
    free(y); 
} 

だから、私は、Y [N-1]はどこ直接制限するポインタyからアクセスされない変更され、それがYによって読み取られるので、これは無効であると思います。

これが正しければ、入力ポインタが修飾されたときにどのように関数を呼び出すことができますか?関数が制限ルールに違反することなく何もできないようです。

制限ポインタを解放する違反ですか?それは一種の修正だと思います。

ありがとうございます!

答えて

1

コードは正しいです。 SumAndFreeagSumを呼び出すと、yから派生したポインタが渡されます。したがって、SumAndFreeのブロックの下にあるすべてのアクセスは、yから派生したポインタを使用して行われます。

freeも電話しても問題ありません。

あなたの関数はxy以外の読み書きをしないので、restrictは実際にこの目的のためには役に立たない。

+0

ああ!本当にありがとう! – Sheila

関連する問題