פורסם 2005 בינואר 720 שנים יש לי מערך int ואני רוצה לדעת כמה אלמנטים הוא מכיל.לדוגמא הקוד דלהלן:int main(){ int *myArr; myFunction(myArr);void myFunction(int *myA){ if(a == b) myA[0] = 1; if(a > b) { myA[0] = 1; myA[1] = 2' } cout << "myA is consisted of " << countElements(myA);}countElements זה שם שאני נתתי. האם קיימת פונקציה מובנית ב ++C המחזירה את מספר האלמנטים במערך ?תודה
פורסם 2005 בינואר 720 שנים אגב, רק לידע כללי, מה שכתבת זה C, עם אלמנט 1 בלבד של C++ שהוא הCOUT, שגם הוא רק Class ואופרטור מועמס...אתה יכול להשמש בפונקציה sizeof() כדי לנחש כמה איברים יש במערך, אבל זה יעבוד לך רק במערך סטטי, ולא דינאמי.(ובמערך סטטי תצטרך לחלק בגודל "התא"...)במערך דינאמי מה שהsizeof יחזיר לך זה למעשה גודל תא...
פורסם 2005 בינואר 720 שנים אי אפשר לדעת אבל למשל במבחנים אצלנו בעיצוב תוכנה הוא נתן פעם אחת פונקציה מוכנה כבר (יעני רק נתן פונקציה לא את המימוש שלה) שמחזירה לך אורך מערך
פורסם 2005 בינואר 720 שנים מחבר תודה לעונים.אעדכן את שאלתי:נניח שאני רוצה לספור את מספר האלמנטיםבאופן הבא:int i = 0;while( myArr[i] != null)++i;שאלתי, מה אני יכול לכתוב במקום: !=null שזו כמובן שגיאת תחביר. במילים אחרות, כחצד מסומן האיבר האחרון או זה שאחריו במערך מסוג int?
פורסם 2005 בינואר 720 שנים לא, אי אפשר,זה לא כמו char* ששם יש לך NULL בסוף כל רצף תווים (STRING).אחרי סיום המערך תקרה לך גלישה ממנו, טעות דיי קריטית,לא ניתן בשום אופן לעשות משהו דומה למה שכתבת עכשיו.
פורסם 2005 בינואר 720 שנים יש פתרון קצת מסוכן.תריץ לולאה אינסופית וכל פעם תקדם אינדקס שמואתחל ל-0 ותבדוקאם יש שגיאה של יתיאה מגבולות המערך ע"י מנגנון ה-TRY ו-CATCHכך שאם יש שגיאה אז בחלק של ה-CATCH תחזיר את האינדקס שהוא גודל המערך
פורסם 2005 בינואר 1020 שנים אתה יכול ליצור מערך של פוינטרים למקומות בזיכרון, ואז מה שרשמת מקודם יעבוד לך.
פורסם 2005 בינואר 1220 שנים אתה יכול לצור מעטפת ל-array שבמהלך כל התוכנית תעקוב אחרי מה שאתה מכניס או מוציא מה-array.. (להשתמש ב-class שהפונקצית הוספה שלו גם תוסיף +1 ל-totalCount נגיד, והפונקצית מחיקה שלו תוריד 1...)ואז להשתמש רק בצורה זו כדי לנהל arrays
פורסם 2005 בינואר 1420 שנים יש פתרון קצת מסוכן.תריץ לולאה אינסופית וכל פעם תקדם אינדקס שמואתחל ל-0 ותבדוקאם יש שגיאה של יתיאה מגבולות המערך ע"י מנגנון ה-TRY ו-CATCHכך שאם יש שגיאה אז בחלק של ה-CATCH תחזיר את האינדקס שהוא גודל המערךזה גם לא נכון,תאורתית(וגם מעשית) אין סיבה שלא תוכל לגשת לקטע זיכרון הבא שאחרי סוף המערך שלך.בחלק ממערכות ההפעלה, זה יעבוד אפילו אם תנסה לגשת לקטע זיכרון שמוקצה לתוכנית אחרת.אתה יכול לצור מעטפת ל-array שבמהלך כל התוכנית תעקוב אחרי מה שאתה מכניס או מוציא מה-array.. (להשתמש ב-class שהפונקצית הוספה שלו גם תוסיף +1 ל-totalCount נגיד, והפונקצית מחיקה שלו תוריד 1...)ואז להשתמש רק בצורה זו כדי לנהל arraysנגיד, vector של STL.
פורסם 2005 בינואר 1420 שנים כן, אבל אז זה מחייב שימוש בCLASSHים חוץ מזה, תכנותית, זה מאוד גרוע. מסכים...ואין רע להישתמש במחלקות קיימות...גם שכותבים ב MFC זה שימוש במחלקות קיימות שבמקרה זה wrapper ל win32 api אפשר גם לדעתי עםsizeof אם אתה יודע את הסוג של המערך..(תחשוב קצת ותעלה על זה )
פורסם 2005 בינואר 1520 שנים מחבר אני מאוד מודה לכל מי שטרח לעזור לי אבל כבר הסקתי את המסקנות. ++C , כמו הממשלה, לוקחת יותר מאשר נותנת. מי שרוצה אורך מערך, שיטרח קודם להעביר את האורך ושלא יצפה ש ++C תטרח עבורו...
פורסם 2005 בינואר 1520 שנים אהה, מה קשור C++? המערך עליו אתה מדבר הוא מערך סטנדרטי של C.שימוש במערך שמומש באמת בC++, (כמו בSTL) יתן לך את התוצאות המבוקשות.בהקשר של מערכים דינמים(או פוינטרים כללים בכלל) אין הבדל בין C++ לC,מהסיבה הפשוטה שC++ היא בסך הכול הרחבה של C.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.