ב c++ פונקציה המחזירה אורך מערך (מס. אלמנטים) - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


pssheba

Recommended Posts

אהה, מה קשור 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 יתחרפן, יעשה פעולה לא חוקית ומערכת ההפעלה תזרוק אותך.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...