Anlamadığım şekilde işaretçilerin kullanıldığı yol arasında belirgin bir tutarsızlık var.Başvuruda/dereferencing C/C++ içinde
Aşağıdaki kod Pointers in C: when to use the ampersand and the asterisk? alınır:
void swap(int *x, int *y) {int tmp = *x; *x = *y; *y = tmp; }
...
int a = 1, b = 2;
printf("before swap: a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("after swap: a = %d, b = %d\n", a, b);
Aşağıdaki kod https://en.wikipedia.org/wiki/Typedef alınır:
İlk durumda:
İşteint do_math(float arg1, int arg2) {
return arg2;
}
int call_a_func(int (*call_this)(float, int)) {
int output = call_this(5.5, 7);
return output;
}
int final_result = call_a_func(&do_math);
anlamıyorum ne Referans operatörünün etkisine karşı koymak için, dereferans operatörü x
veile birlikte kullanılır., bu yüzden onları daha fazla ya da daha az kullanabilmeniz için onları referans olarak geçmemiş olsaydınız, bunları dereferencing olmadan kullanabildiniz, bunları *
'ler ile kullanabilirsiniz. Ancak ikinci durumda, call_this
, referans tarafından geçirildiği gerçeğini ortadan kaldıran bir hata giderme işleci kullanılarak çağrılmaz; yani (*call_this)(5.5, 7)
olarak adlandırılmaz.
*
'nu neden referans olarak iletme etkisini tersine çevirmek için kullanabildiniz, böylece olayı, değişkenler söz konusu olduğunda normalde yaptığınız gibi daha fazla veya daha az kullanabilirsiniz;
C referanslar, sadece işaretçileri desteklemez. C++ farklı bir dildir. Ve bir "referencing operatörü", C. – Olaf
'da mevcut değildir. "Karşılıklılık" ifadesini kullanımınızı çok kafa karıştırıcı buluyorum. Burada hiçbir şeyle mücadele yok. [Bu liste] 'deki kitaplardan (http://stackoverflow.com/q/388242/2069064) yararlanmanızı ve işaretçilerin hangisinin daha iyi olduğunu anlamanızı öneririz. – Barry
Sanırım kelime karşıtlığını kullanmam biraz kafa karıştırıcıydı. Ben sadece referans olarak bir değer iletirseniz, normalde kullanmak için onu ayırmak zorunda kalacaksınız, bu yüzden ikisi birbirini tamamlar. – inhahe