İki boyutlu bir dizi, işaretçiyi ints işaretçisine düşürmez. Ints dizilerine işaret eden bir göstericiye dönüşür - yani yalnızca ilk boyut bir göstericiye dönüşür. İşaretçi, bir işaretçinin boyutuna göre artırıldığında, ancak 5 tamsayı dizisine ilerleyen int işaretçilerine işaret etmez. Her bir alt dizini ayrı ayrı tahsis edildiğinde
class Myclass {
private:
int myarray[5][5];
public:
typedef int (*pointer_to_arrays)[5]; //typedefs can make things more readable with such awkward types
pointer_to_arrays get_array() {return myarray;}
};
int main()
{
Myclass o;
int (*a)[5] = o.get_array();
//or
Myclass::pointer_to_arrays b = o.get_array();
}
işaretçi için bir işaretçi (int**
), beş işaretçiler bir dizi var Burada
int* p[5];
for (int i = 0; i != 5; ++i) {
p[i] = new int[5];
}
(, başlangıçta işaretçiler bir dizi bilgisi yani) kullanılır her biri ayrı bir bellek bloğunda ilk maddeye işaret eder, toplam 6 ayrı bellek bloğu. iki boyutlu bir dizide
bellek bitişik tek bir blok almak:
int arr[5][5]; //a single block of 5 * 5 * sizeof(int) bytes
Bu şeylerin bellek düzeni tamamen farklıdır ve bu nedenle bunları döndü ve geçilemeyen görmelisiniz aynı şekilde.
Kılavuz nedir? Myarray değil mi? – woodstok
Özel bir üyeye yapılan doğrudan başvurunun yapılması her zaman iyi bir fikir olmayabilir. Bu şekilde kapsüllemeyi etkin bir şekilde kırıp, herhangi birinin özel üyenize erişmesine ve değiştirmesine izin verirsiniz. Bu tasarımınızda kabul edilebilir veya olmayabilir. –
@MIkhail: justin bu soruyu gönderdiği andan beri çevrimiçi olmadığından, onu düzeltmek için özgürlüğümü aldım. – sbi