לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #8  
ישן 20-11-2005, 18:59
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
...
בתגובה להודעה מספר 7 שנכתבה על ידי DRagonRage שמתחילה ב "שניה עפי מה שאני מבין:"

קודם כל, זה די קל ללכת לאיבוד בנושא של מצביעים.
char [] = "bla bla blaa";
כמובן שזה לא ייתן לך כלום, שכחת את שם המשתנה.
וכן, זאת דרך מקובלת לייצור מחרוזת, במקרה הזה, המהדר מבצע את ההקצאה עבורך.
char nick[] = "scripter"; == char *nick = "scripter";
שני המשפטים הנ"ל זהים.

בשביל לבנות מערך של מחרוזות ב-C, אתה באמת צריך לייצור מערך של מצביעים, שכל מצביע, מצביע אל כתובת של תחילת מחרוזת מסויימת.

char *strings[] = { "dude", "duda", "dede", "doda", "dada" };
puts( strings[0] ); /* dude */

מה שאמרת, לגמרי לא נכון (הכוונה לקטע של "הכנסה של מס' מחרוזות" ).
מה שהצגתי למעלה יעשה את העבודה, אך ע"מ להבין טוב יותר מה עשיתי למעלה, ניתן לפרק את זה בצורה הבאה:

#define MAX_STRINGS 5
/* ... */
char *strings[MAX_STRINGS];
strings[0] = "dude";
strings[1] = "duda";
strings[2] = "dede";
/* ... */
puts( strings[0] ); /* dude */
שים לב איך הפעם, בניגוד לקוד הקודם, עליי להודיע למהדר כמה מחרוזות (אלמנטים), אני מעוניין להחזיק במערך הנ"ל.
בדוגמא הקודמת, בצעתי את האתחול ישירות לאחר ההכרזה, לכן המהדר טיפל לבד בבעיה, אבל הפעם, אין בו את היכולת לעשות זאת.

בקוד הזה, זה נראה כאילו מדובר במערך בעל מימד אחד סה"כ.
אבל, אם תחשוב קצת יותר.. מה זה בעצם מחרוזת ב-C? מערך של תווים (שבסופו יש את NUL), ואיך C מתייחסת אל מערכים? אה כן.. מצביעים. לכן, נהוג להגיד שמערך של מחרוזות, זה בעצם מערך של מצביעים.

לא מאמין עדיין שמדובר שם במערך דו-מימדי? well...:
printf( "%c %c %c", strings[0][0], strings[1][0], strings[2][0] );
הפלט אמור להיות "d d d" (אות הראשונה של שלושת המחרוזות הראשונות במערך)
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 23-11-2005, 13:16
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
...
בתגובה להודעה מספר 10 שנכתבה על ידי chuby שמתחילה ב "הערה קטנה לגבי בקוד שהצעת..."

// לא נכון , לא ניתן לבצע כך השמת מחרוזות ב C רק ע"י strcpy בהנחה שיש מקום בכל מחרוזת כולל התו האחרון ל NULL
כמובן שניתן לבצע השמת מחרוזת בדרך שהצעתי, בהנחה שהמהדר דואג להקצאת הזיכרון עבורך.
char *string = "dude";
תקין לחלוטין, אתה מוזמן לפנות ל-K&R ולבדוק זאת.
ומה שהצעת מגוחך לחלוטין, שימוש ב-strcpy בלי בכלל להקצאות זיכרון. הייתי חושב פעמיים לפני להגיב.
ואם כבר, התו האחרון הינו התו NUL ולא NULL.

//קוד שהצעתי דורש הגדרת הגדרת גודל כל מחרוזת ( כלומר ללא מצביעים , או ע"י הקצאה דינאמית )
נכון, הוא דורש הגדרת גודל למחרוזת באופן "ידני" (הכוונה, הגודל אתה מגדיר, אבל בכל זאת, המהדר מבצע את ההקצאה), מה שהקוד שלי לא דרש (המהדר הקצא ב-ד-י-ו-ק כמות הזיכרון הדרושה), לכן הוא התאים יותר ע"מ להמחיש את הרעיון.
ומה הכוונה ללא מצביעים? אתה מוכן להסביר? קשה לי להאמין שאתה עובד עם מערכים ללא מצביעים.

//שלך יעבוד (תלוי בסביבה והגדרות המהדר)
הקוד שלי תואם ANSI C לחלוטין, תקין לגמרי. הוא יעבוד תחת כל מהדר שתומך בתקן ANSI C, ללא שום הגדרות מיותרות.

//ועלול לקרוס בהמשך
כל עוד אתה מבין מה הולך בקוד, ולא מנסה לבצע שום דבר שלא תקין, הוא לא ייקרוס, נקודה.

//אבל לא נכון תכנותית .
ו.. מי אתה שתקבע? הקוד הנ"ל היה אמור להיות דוגמא לפירוק אפשרי ע"מ להמחיש את הבעיה.
הקוד תקין, עובד, ולא ייקרוס כל עוד המתכנת יודע מה הוא עושה בקוד.
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 23-11-2005, 15:43
צלמית המשתמש של scripter
  scripter scripter אינו מחובר  
 
חבר מתאריך: 04.08.02
הודעות: 4,468
...
בתגובה להודעה מספר 13 שנכתבה על ידי scripter שמתחילה ב "..."

//אבל לא נכון תכנותית .
אני אתייחס לחלק הזה בנפרד, כי אני חושב שהבנתי מה הכוונה שלך.
יש להיזהר במס' דברים בקוד שהבאתי, מכיוון שלקחתי בחשבון שאינינו מעוניינים לשנות שום ערך במחרוזות לאחר הצבתן.

מה כן, אתה צודק במקרה ואנו מעוניינים לשנות למשל את הערך של המחרוזות (מה שלא לקחתי בחשבון כמובן. כשהצגתי את הדוגמא השניה, הריי זה היה פירוק לקוד שגם הניח מראש שהמחרוזות לא נתנות לשינוי).

לכן ציינתי, שהקוד לא ייקרוס כל עוד המתכנת יודע מה הוא עושה - זה כולל גם את הטעות שהצגתי למעלה.

בכל מקרה, אם הכוונה שלך הייתה להעיר על הנושא הזה, אז אתה צודק.
טעות שלי שלא הערתי על כך.
_____________________________________
C pogrammers never die. They are just cast into void.


תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 15:54

הדף נוצר ב 0.06 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר