Passage restreindre les pointeurs qualifiés aux fonctions?

Les pointeurs qualifiés de ressortingction m’ont été expliqués comme ayant une règle: Tout object auquel le pointeur a access et modifié n’importe où est uniquement accessible par le pointeur. Donc, ce qui suit ne fonctionne pas, non?

void agSum( int * ressortingct 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); } 

Donc, je suppose que ceci n’est pas valide car y [n-1] est modifié quelque part non directement accessible depuis le pointeur restreint y, et il est lu par y.

Si cela est correct, comment pouvez-vous appeler des fonctions lorsque le pointeur d’entrée est qualifié restreint? Il semble que la fonction ne puisse rien faire sans violer la règle de ressortingction.

Est-ce une autre violation de libérer le pointeur de ressortingction? C’est une sorte de modification, je suppose.

Merci d’avance!

Votre code est correct. Lorsque SumAndFree appelle agSum , il passe un pointeur dérivé de y . Ainsi, tous les access SumAndFree sous le bloc du SumAndFree de SumAndFree sont effectués à l’aide de pointeurs dérivés de y .

C’est bien d’appeler free aussi.

Vos fonctions ne lisent ou n’écrivent que x et y , donc ressortingct ne sert à rien dans ce cas précis.