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