20-11-2005, 18:59
|
|
|
|
חבר מתאריך: 04.08.02
הודעות: 4,468
|
|
...
קודם כל, זה די קל ללכת לאיבוד בנושא של מצביעים.
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.
|