2016-03-20 13 views
1

Dizilerin bir işlev çağrısında referans olarak geçtiğini biliyorum, ancak ya bir dizi öğesini, örn. func(ar[0]). arg[0] değeri değer veya başvuruyla geçti mi?Dizi öğeleri de değer veya başvuruyla mı iletiliyor?

+1

, bir dizi olup olmadığına bağlıdır. Daha büyük bir kod örneği, –

+7

Dizilerinin referans olarak geçilmemesine yardımcı olur. Bir dizi ifadesi, ilk öğeye bir göstericiye bozulur, ancak bu işlevler, geleneksel olarak işlevlere aktarılır. C'deki her şey değere göre geçirilir. –

+0

@KerrekSB Diziler, "referansa göre" tanımı için C'ye bakınız [https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_reference]. Bir işaretçi [referans] tanımına uyar (https://en.wikipedia.org/wiki/Reference_ (computer_science)). –

cevap

2

Diziler, referans ile bu geçmedi bunlar bozunma olarak sizeof operatöre bir işlemci olarak dışında işlev parametresi olarak ya da bir ifadede kullanılan işaretçiler. Bu nedenle, işlev, argümanın işlev prototipinde, bir işaretçi veya dizi olarak nasıl tanımlandığına bakılmaksızın dizinin ilk elemanına bir işaretçi alır.

Bir dizi öğesi iletirseniz, bu dizi öğesi bir dizinin kendisi değilse, bu değer ilk öğeye bir işaretçi iletilirse değere geçirilir.

+0

@ AndrésRivero: Kabul edildi olarak işaretlemek için cevap puanının altındaki gri onay işaretini tıklayabilir misiniz? – chqrlie

0

Dizi türünüz ne olursa olsun, bu öğeye bir işaretçi değil, iletilecektir.

int a[2]; 
a[0] =5; 
a[1] =6; 

func1(a[0]); // passes int to func1 
func2(&a[1]); // passes pointer to int 

func1(int z)... 
func2(int * z)... 
İlgili konular