עבור לתוכן

ב c++ פונקציה המחזירה אורך מערך (מס. אלמנטים)

Featured Replies

פורסם

אהה, מה קשור C++? המערך עליו אתה מדבר הוא מערך סטנדרטי של C.

שימוש במערך שמומש באמת בC++, (כמו בSTL) יתן לך את התוצאות המבוקשות.

בהקשר של מערכים דינמים(או פוינטרים כללים בכלל) אין הבדל בין C++ לC,

מהסיבה הפשוטה שC++ היא בסך הכול הרחבה של C.

,תיקון שגיעה. C++ אן CPP היא לא הרחבה של C, היא שפה בפני עצמה המבוססת עצמים(OOP) - שהתחביר שלה זהה ל C. כמו כן ה מהדר שלה תומך ב C, זות אומרת שהפקודות שאתה רושם ב C עדיין יעבדו אבל את לא מתכנת ב CPP

רלונטי או לא, עקב העובדה ש ב C המערכים אף פעם לא דינמיים - אתה חייב לציין את הגודל של המערך כשאתה מגדיר אותו.

פשוט תגדיר משתה שיצין הגודל וכל פעם שאתה מגדיל או מקטין את המערך תשנה את המשנה בהתאם

פורסם

"Bell Labs' Bjarne Stroustrup developed C++ (originally named "C with Classes") during the 1980s as an enhancement to the C programming language."

מתוך ההגדרה בוויקיפדיה.

אתה תמיד יכול להגדיר פוינטר ולהתיחס אליו כאל מערך, אבל זה בדרך כלל נגמר מענין :screwy:

פורסם

,תיקון שגיעה. C++ אן CPP היא לא הרחבה של C, היא שפה בפני עצמה המבוססת עצמים(OOP) - שהתחביר שלה זהה ל C. כמו כן ה מהדר שלה תומך ב C, זות אומרת שהפקודות שאתה רושם ב C עדיין יעבדו אבל את לא מתכנת ב CPP

רלונטי או לא, עקב העובדה ש ב C המערכים אף פעם לא דינמיים - אתה חייב לציין את הגודל של המערך כשאתה מגדיר אותו.

פשוט תגדיר משתה שיצין הגודל וכל פעם שאתה מגדיל או מקטין את המערך תשנה את המשנה בהתאם

אתה יכול להקצות את המערך דינאמית עם MALLOC(כמובן שאתה צריך להגדיר פוינטר מהסוג שאתה רוצה להקצות).

אבל דיברנו על C++ והשאלה דיי נענתה.

פורסם

אין אפשרות לעשות את זה.

-אם אתה יצרת את המערך את יכול *לשתול* את מספר האלמנטים למשל בתא הראשון כדי לזכור אותו.

-אם זה מערך של טקסט אתה יכול לחפש NULL

-אם זה מערך סטטי אתה יכול לחשב ע"י sizeof(array)/sizeof(int)

אופציה לתכנות מתקדם:

אם אתה ממש אבל ממש רוצה לדעת מה האורך של המערך הדינאמי ואתה היחיד שמקמפל את התוכנית. אתה יכול לבדוק עם איזו סיפריה הקומפילר שלך עובד ולראות היכן הוא שומר את גודל הזיכרון שהוא החזיר.

לדוגמא: malloc שומר header עם הנתונים על הזיכרון שהוא הקצה ממש מתחת לכתובת שהוא מחזיר. אתה יכול להגדיר struct מהסוג ה- header ולכוון אותו מיקום אחד פחות הזיכרון שחזר אליך.

אני לא ממליץ על השיטה מכיוון שהיא תלויית סיפריה.

פורסם

למען האמת במערך שהקוצה דינאמית עם malloc נשמר הגודל שלו במקום המינוס 1 (ואולי גם מינוס 2). הסיבה ששומרים את זה היא שאחרי זה שאתה מבצע free אתה לא אומר לו כמה מקום לשחרר אז הוא מסתכל במידע הזה ולפי זה יודע כמה לשחרר.

קפיש?

פורסם

ואללה, לא ידעתי שהוא שומר את גודל המערך. המקום הזה מוגן דרך כלשהי(אם מנסים לשנותו התוכנית עפה), או שאני יכול לשנות אותו איך שאני רוצה(ואז פונ הFREE תעשה בעיות).

פורסם

אני לא יודע בדיוק על כמה בלוקים הוא יושב ואיך הוא מקודד אבל אני יודע שהוא שם.

אם תשנה אותו ה-free יתחרפן, יעשה פעולה לא חוקית ומערכת ההפעלה תזרוק אותך.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים