פורסם 2007 באוגוסט 618 שנים מערך הוא פוינטר לכל דבר. אין לו הגבלות.אפשר לעשות ככה:int c[10];*c = 1;וזה שקול לקוד הבא:int c[10];c[0] = 1;הביטוי הזה:c[i];זהה לביטוי הזה:*(c+i)
פורסם 2007 באוגוסט 618 שנים תגדיר "לא יעבוד".הקומפיילר לא יצעק עליך (אולי, אם הוא מספיק חכם, הוא יזהיר אותך שיכול להיות שאתה חורג מגבולות המערך).כשתריץ את התכנית היא תעשה בעיות, בגלל ה-buffer overflow.
פורסם 2007 באוגוסט 618 שנים מערך הוא פויינטר מוגבל. בעצם המערך מכיל כתובת בזכרון לתא הראשון במערך = אותו דבר כמו פוינטר ( מכיל כתובת) ההבדל הוא שבפויינטר רגיל אתה יכול לשנות את הכתובת שאותה הוא מכיל => לגרום לו להצביע לכתובת אחרת בזכרון. במערך אתה לא יכול לעשות את זה. הכתובת נקבעת בזמן ההקצעה הסטטית ולא ניתנת לשינוי במהלך התוכנית. כל שאר שיטות הגישה זהות לפויינטרים ולמערכים( בגלל ששניהם בעצם פוינטרים).פה בעצם "ההגבלה" של המערך ( אי יכולת לשנות את הכתובת אליה הוא מצביע בזמן הריצה).בקשר לגלישת זכרון, זה יכול לקרוא גם במערך וגם בפויינטר רגיל. שגיעת קומפילציה זה לא יתן. או שתקבל באג לא מובן, אבל סביר להניח שתקבל שגיעת זמן ריצה.זה לא קשור להגבלות, ככה פויינטרים עובדים ב C, ו האופרטור [] מוגדר לעבוד בצורה מסויימת וככה הוא ימשיך לעבוד. אתהזה שצריך לוודע שאין לך גלישה או פנייה לכתובת לא חוקית.http://www.eskimo.com/~scs/cclass/notes/sx10b.htmlhttp://www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/pointer.htmlהשורה *C++ תנסה לקדם את הכתובת ששמורה ב C, אם C הוא מערך סטטי את תקבל שגיעה כי לא ניתן לשנות כתובת ששמורה במערך סטטי. בפויינטר רגיל זה אפשרי.
פורסם 2007 באוגוסט 618 שנים ב C מערך הוא בעצם פוינטר קבוע?או במילים אחרותchar s[1];שקול ל:char c;const char *s = &c;?
פורסם 2007 באוגוסט 618 שנים לא.מה שרשמת בשורה השנייה זה לא מצביע "קבוע"/סטטי אלה מצביע לקבוע. כלומר אתה יכול לשנות את הכתובת ש s מכיל, אבל לא ניתן לשנות את ערך התא שאליו הוא מצביע.במערך זה ההפך, ניתן לשנות את ערכי התאים. אבל לא ניתן לשנות את הכתובת שהמערך מכיל( כתובת התחלת המערך).הגדרה של פויינטר קבוע( ניתן לשנות ערך של התא אליו מצביע, אבל לא ניתן לשנות את הכתובת שאותה הוא מכיל):int i=17;int* const p1 = &i; *p1 = 29;
פורסם 2007 באוגוסט 718 שנים ומה שרשמת עכשיו שקול לint i[1] = {17};*i = 29;?ובשורהint* const p1 = &i;אפשר להצמיד את הכוכבית ל const (משמאל) מבלי שתשתנה המשמעות? אם לא אז לאיפה כן?
פורסם 2007 באוגוסט 718 שנים Jaman - אם אני מבין אותך נכון, אז אתה מתכוון האם זה:int* const p1 = &i;שקול לזה:int *const p1 = &i;ולמיטב ידיעתי, התשובה היא כן.
פורסם 2007 באוגוסט 818 שנים מחבר אתם יודעים עדין עם PUTS וGETS זה נותן לי להכניס יותר (ברור שהכוונה היא שהוא גם מכניס יותר).עריכה:או שאני לא משתמש טוב בGETS?אני עושה ככהgets(x);
פורסם 2007 באוגוסט 818 שנים מחבר סבבה, עובד.אבל לא נראה לך פתרון די דבילי? כאילו אין פונקצית קליטה נורמלית או שהם רק בC++?נוצרו לי עוד שאלותלמה אני לא יכול לרשום CLRSCR(); לפני הגדרת המשתנים(אה, זה בגלל שההגדרה חייבת להיות ראשונה?)?ויש לי שאלה שהולכת ככהלכתוב רקורסיה שמקבלת מחרוזת ומדפיסה את כל התווים שהקוד אסקי שלהם קטן יותר משל התו האחרון. הפונקציה לא מחזירה כלום.עכשיו פתרתי את זה רק עם STRLEN, יש דרך בלי?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.