2016-03-31 17 views
3

Nitelikli göstergelerin bir kural olarak bana açıklandığını belirtildi: İşaretçi tarafından erişilen ve herhangi bir yerde değiştirilen herhangi bir nesneye yalnızca işaretçi tarafından erişilir. Yani aşağıdakiler işe yaramaz değil mi?Geçiş, kalifiye işaretçileri fonksiyonlara göre kısıtlıyor mu?

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); 
} 

Yani, y [n-1] bir yerde, doğrudan sınırlamak işaretçi y erişilmez modifiye edilir, ve y tarafından okunur için bu geçersiz olduğunu tahmin.

Eğer bu doğruysa, giriş işaretçisi kalifiye sınırlandığında işlevleri nasıl arayabilirsin? Fonksiyon, kısıtlama kuralını ihlal etmeden hiçbir şey yapamaz gibi görünüyor.

Kısıtlama işaretleyiciyi serbest bırakmak başka bir ihlal mi? Bu bir değişiklik, sanırım.

Şimdiden teşekkürler!

cevap

1

Sizin kodunuz doğru. SumAndFree, agSum çağırdığında, y'dan türetilmiş bir işaretçiyi geçirir. Yani SumAndFree 'in gövdesi altındaki tüm girişler y'dan türetilmiş işaretçiler kullanılarak yapılır.

free numaralı telefonu da aramak güzel.

İşlevleriniz, x ve y'dan başka herhangi bir okuma ya da yazma gerçekleştirmez, bu nedenle restrict aslında tam olarak bu durumda bir amaca hizmet etmez.

+0

Oh! Çok teşekkürler! – Sheila

İlgili konular