تمام سوالات سوالات بدون پاسخ سوال بپرسید

در مورد نحوه ارسال یک آرایه به تابع در ++C مواردی را بلدم. برای نمونه برای ارسال یک آرایه از int به یک تابع به این صورت عمل می کنم:

int * TouchTheArray(int* arr) {...}

اما سوال من این است که طول آرایه را چطور باید متوجه شوم. آیا برای طول آرایه هم باید متغیر دیگری را برای مثال با مرجع به تابع ارسال کنم که طول آرایه را هم در آن ثبت کند یا می توان به نوعی از خود آرایه طول آن را هم متوجه شد؟

2 پاسخ

وقتی آرایه ای به تابع فرستاده میشود فقط آدرس اولین عنصرش فرستاده میشود، در نتیجه یک اشاره گر به تابع فرستاده میشود.

بنابراین: اگرچه تا قبل از پاس کردن آرایه به تابع (با فرمولی) میشد اندازه آرایه را بدست آورد، ولی اکنون که تبدیل به اشاره گر شده دیگر نمیتوان طول آن را بدست آورد.

حتی در این کد نیز نمیتوان طول آرایه را بدست آورد.

int *a=new int[10];

یا اگر راهی باشد به ذهن من نرسید.

(08 ژانویه '13, 13:34) M-Khademloo

سلام،
ظاهرا راهی نیست. اما من یه پیشنهاد دیگه هم دارم واست؛ یک کلاس تعریف کن اون رو بصورت لیست پیوندی تعریف کن. توش یک متغیر بذار برای طول و خلاصه هر چی میخوای توش تعریف کن و به عنوان یک لیست با طول متغیر میتونی ازش استفاده کنی. البته این سادگی و شفافیت پردازش بیشتری رو میطلبه و اگه از این لیست در یک کار سنگین با حجم بالای عضو بخوای استفاده کنی، به Performance ضربه میزنه.
فایل .h یک نمونه کلاس رو نوشتم برات که پیشنهاداتی برای این کلاسه دادم. هر کدومش رو که خواستی بذار و پیاده سازی کن:

template <class T>
class List
{
public:
    int length();
    void add(T value);
    void remove(int index);
    void remove(T value, int removeAny);
    void remove(T* item);
    T& getValue(int index);
    T& setValue(int index);
    void clear();
    void sort(int descending);
    T& iteratorNext();
    T& iteratorPrevious();
    void iteratorReset();

private:
    int _length;
    ListElement _startElement;
    ListElement _iteratorCurrentElement;
};

بروز رسانی:
هر عضو لیست پیوندی دارای ساختار زیر هست:

template <class T>
struct ListElement
{
    //Linked-List elements has data section and next element and previous element
    int data;
    ListElement next;
    ListElement previous;
};

توضیح بیشتر خواستی بگو
یا حق

toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery

آموزش زبان جاوا Java
آموزش زبان انگلیسی
آموزش برنامه نویسی C
آموزش برنامه نویسی C++
آموزش جی کوئری jQuery
آموزش زبان سی شارپ C#
آموزش برنامه نویسی اندروید
آموزش برنامه نویسی اندروید
آموزش زبان اسمبلی Assembly
آموزش جاوا اسکریپت JavaScript
آموزش برنامه نویسی به زبان PHP

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
  • ×44
  • ×22
  • پرسیده شده: 12 مه '12, 21:47
  • بازدید: 4,499 بار
  • آخرین بروزرسانی: 08 آوریل '13, 16:17

این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها