C++ eğitmenim, sınıfta C++'da bir dizi boyutunu belirleyecek bir işlev olmadığını ve bundan memnun olmadığımızı söyledi. Ben bu kodu (sizeof(array)/sizeof(*array))
verdi ve ben tam olarak anlamadığım halde stackoverflow üzerinde bir soru buldum, anladım ki, bu diziye tahsis edilen toplam bellek miktarını alır ve varsayılan bellek ayırma olduğunu varsaydığım şey ile böler. veri tipi ... (???) Yazma işlevlerini (CS 111 - Temel Bilgiler 1) uygulamamı istedim ve onu ilettiğim herhangi bir dizideki öğe sayısını döndüren bir işlev yazmaya karar verdim. Yazdıklarımız buydu:Bir diziyi C++ uygulamasında geçirirken, sizeof() neden ana işlevdekiyle aynı çalışmaz?
#include <iostream>
using namespace std;
int length_of_array(int some_list[])
{
// This only returns the integer 1 for some reason
return (sizeof(some_list)/sizeof(*some_list));
}
int main()
{
// Declare and initialize an array with 15 elements
int num_list[] = {2,4,6,8,10,12,14,16,18,20,22,24,26,28,30};
//Outputs what I assume is the total size in bytes of the array
cout << sizeof(num_list) << endl;
//Outputs what I assume to be size of memory set aside for each in element in an array
cout << sizeof(*num_list) << endl;
//This extrapolates array's number of elements
cout << "This is the output from direct coding in the\nint main function:\n" <<
(sizeof(num_list)/sizeof(*num_list)) << endl;
//This function should return the value 15 but does not
int length = length_of_array(num_list);
cout << "This is the length of the array determined\n";
cout << "by the length_of_array function:\n" << length << endl;
return 0;
}
Ne yaptığımın bir önemi yok. Birisi bana C++ özel bir geçici çözüm ve nasıl çalıştığını açıklar mı? Teşekkür ederiz. Temelde
int length_of_array(int some_list[]);
Eğer bir fonksiyonun argüman olarak bir dizi geçirilecek zaman, sen int arr[]
veya int arr[42]
gibi geçerse olursa olsun, dizi ONE ile (bir işaretçi bozunur:
C fonksiyonları aslında diziler olarak argümanlar alamaz. Diziler yerine * işlevlere geçirildiğinde imleçlere * dönüşürler. Bkz. Http://www.c-faq.com/aryptr/ – jamesdlin
Bu, tam olarak bu sorunun bir kopyası değildir. Bu C hakkında, bu C++ hakkında. Ve cevabın gösterdiği gibi, önemli bir fark var. C.'de bu şablon numarasını kullanamazsınız. Yeniden açılmak için oy veriyorum. –
Eğer tamamen farklı bir cevabı varsa, nasıl bir kopyası olur - kabul edilen cevap çoğaltıldığını söylediğiniz soruya uygulanabilir mi? – Sinux1