קוד: |
The value within the square brackets must be a constant value determined at compile time. It can be a literal value or a
symbolic constant, but it cannot be a variable. |
קוד: |
Static arrays have sizes determined at compile time, while the size of dynamic arrays may be supplied at run time, if necessary. |
Anonymous : |
1. אם אתה משתמש ב-gcc לקמפל את הקוד ולא מתעקש על הצמדות לתקן, הוא משתמש בהרחבה פנימית ומאפשר את זה:
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html בפועל, הקוד שלך לא תקין ולא יתקמפל בכל קומפיילר. 2. אם ב-"מערך דינאמי" אתה מתכוון לסתם חתיכת זיכרון שהקצית עם malloc, אני לא בטוח, אני חושב שלא. בדרך כלל כשרוצים מערך דינאמי ב-++C משתמשים ב-vector ואז לולאות טווח עובדות מצוין. --לב |
c++IST : | ||
אני משתמש ב-"++g". אני מדבר על הקצאה עם new למשתנה מצביע. לגבי וקטורים אני יודע שזה עובד, וזה גם עובד בערכים סטטיים. |
borsood : |
מצד אחד אתה מדבר על מערך סטטי שיכול להיות מאותחל רק מקבועים או מסטטיים.
מצד שני אתה מדבר על new שמאותחל בזמן ריצה. תן דוגמת קוד ומה לא ברור לך. (הערה לימודית: ב++c מודרני לא משתמשים במערכים והשימוש בהקצאת זכרון ע"י new מוגבל מאד) |
קוד: |
int x;
cin >> x; int y[x]; |
קוד: |
int * x;
x = new int [5] for (int z:x); |
c++IST : | ||||||
הבט היטב בשאלה למעלה מדובר בשתי שאלות נפרדות. אם אתה רוצה קוד בכל אופן, לגבי שאלה 1:
חוקי? בספר כאמור כתוב שלא חוקי, בפועל כן עובד אצלי. לגבי שאלה 2
הקוד אינו חוקי. השאלה אם יש דרך כן להשתמש ב-"Range-based for loop" - על מערך דינאמי? |
c++IST : | ||
אם אתה רוצה קוד בכל אופן, לגבי שאלה 1: חוקי? בספר כאמור כתוב שלא חוקי, בפועל כן עובד אצלי. לגבי שאלה 2
הקוד אינו חוקי. השאלה אם יש דרך כן להשתמש ב-"Range-based for loop" - על מערך דינאמי? |
קוד: |
tmp.cpp:7:10: warning: ISO C++ forbids variable length array ‘y’ [-Wvla]
int y[x]; ^ |
קוד: |
for (auto z : y) {
cout << "z" << "=" << z << endl; } |
c++IST : | ||||
1.
בספר לימוד של ++C אני קורא את הפסקאות הבאות בהקשר של המספר באתחול גודל מערך סטטי. ו:
וכן:
בפועל אני מצליח לאתחל משתנים במערכים סטטיים ללא כל בעיה, יש למישהו הסבר? 2. האם יש דרך להשתמש בלולאה מבוססת טווח, על מערך דינאמי? |