2011-12-11 28 views
5

Yalnızca Array işaretçisini işaret ettiğimde bir Dizinin uzunluğunu elde etmenin bir yolu var mı? (-, gerçek C "konuşmak" do not üzgünüm Bu Arduino Kanunu bir snipplet olan)İşaretçiyi kullanarak bir dizi uzunluğu alın

Aşağıdaki örnek

int testInt[3]; 
testInt[0] = 0; 
testInt[1] = 1; 
testInt[2] = 1; 

int* point; 
point = testInt; 

Serial.println(sizeof(testInt)/sizeof(int)); // returns 3 
Serial.println(sizeof(point)/sizeof(int)); // returns 1 

bakınız.

cevap

11

Kolay cevap hayır, yapamazsınız. Büyük olasılıkla dizideki öğelerin miktarını depolayan bir değişkeni bellekte tutmak isteyeceksiniz.

Ve bu kadar kolay bir cevap yok. Bir dizinin uzunluğunu belirlemenin bir yolu vardır, ancak bunun için dizinin sonunu -1 gibi başka bir öğeyle işaretlemeniz gerekir. Sonra sadece döngü ve bu elementi bul. Bu elementin pozisyonu uzunluktur. Ancak, bu geçerli kodunuzla çalışmaz.

Yukarıdakilerden birini seçin.

+3

+1 Bu, C'nin berbat olduğu şeylerden biridir. :) –

+1

@WTP C++ ile aynı, std :: vector' sizin için bunu halledecektir. –

1

Yapamazsın ve C ise bir dizi değişken varsa bir dizinin uzunluğunu çıkarabiliriz

3
  • ++ kullanımı vektör sınıfı işaretçi aritmetik

    kullanarak dizi uzunluğunu anlamak çalışmamalıdır.

  • Sadece bir işaretçiniz varsa, bir dizinin uzunluğunu öğrenemezsiniz.
1

Sen tüm dizi işaret ve NOT gibi ilk elemana işaret edebilir,:

int testInt[3]; 
int (*point)[3]; 
point = testInt; 

printf("number elements: %lu", (unsigned long)(sizeof*point/sizeof**point)); 
printf("whole array size: %lu", (unsigned long)(sizeof*point)); 
+0

Bu durumda, zaten uzunluğunu bilmek zorundasınız, ki bu sayısız bir işe yaramaz hale getirir. –

4

Ayrıca burada bir Arduino projesi yapıyor ... internette Herkes imkansız ısrar görünüyor Char işaretçisi ...

örneği bu ... yapmak ve henüz kitaptaki en eski hile boş diziler sonlandırılmış ile sadece iyi iş gibi görünüyor için:

int getSize(char* ch){ 
     int tmp=0; 
     while (*ch) { 
     *ch++; 
     tmp++; 
     }return tmp;} 

magic ...

+1

Bir char dizisi için, strlen() öğesini kullanarak boyutunu yukarıda gösterildiği gibi aynı yöntemi kullandığından kolayca alabilirsiniz. Ancak sayısal bir char dizisi için yapamazsınız. –

İlgili konular