שיחה:שפת C/מצביעים, מערכים, ופונקציות

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש

הדוגמה בשפת C/מצביעים, מערכים, ופונקציות#מצביעים לvoid[עריכה]

אהלן ג'וני. סחתיין על מילוי הפסקה. לדעתי כדאי לתת דוגמה פשוטה יותר, נניח אחת שמממשת בפועל את memcpy. הפונקציה swap תכלס עושה משהו כמו שלוש פעולות memcpy, ופוינטרים לווייד גם ככה קשים להבנה בהתחלה (לדעתי), אז אולי כדאי לתת את הדוגמה הכי פשוטה שאפשר, ואין משהו יותר פשוט מmemcpy. מימוש swap גנרי דווקא נראה אחלה, אבל לדעתי בתור תרגיל. מה דעתך? Thedsadude 02:23, 17 בדצמבר 2007 (IST)

אתה צודק. אני חשבתי על פונקציית swap שמחליפה רק בין הכתובות של המצביעים, אבל זה עובד רק אם המצביעים האלה הם חלק מ-struct, או שמקבלים מצביע למצביע, כך שזו באמת לא דוגמה טובה בשביל ההתחלה. בכל מקרה, כתבתי רק חלק קטן מהפיסקה ויש עוד לא מעט מה להוסיף. Johnny Zoo 16:57, 17 בדצמבר 2007 (IST)

פיצול[עריכה]

סיימתי את מה שתכננתי לכתוב בנושא מצביעי void. לדעתי, הפרק הזה כבר התנפח מאוד, וכדאי לפצל אותו - אולי ליצור פרק על תכנות מונחה עצמים ב-c ושם אפילו להרחיב עוד על הענין. Johnny Zoo 00:36, 17 בפברואר 2008 (IST)


הערה לכותבי הערך[עריכה]

ח"ח על הפירוט הרב, רק שני דברים שנתקלתי בהם (אני לא ממש מיומן בעריכת ויקיפדיה, כך שהייתי מעדיף אם מישהו אחר היה עושה את זה):

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

שנית, כשמעבירים כתובת פונקציה לפונקציה, אין צורך בסימן &. func1(func2) אמור להספיק בהחלט.

לגבי הצורה void print2() - זו צורה סטנדרטית ומוכרת (ולמען האמת, כמעט ולא נתקלתי בצורה שכתבת). לגבי העברת הכתובת לפונקציה - תודה על ההערה, הוספתי אזכור לעניין. בברכה, Johnny Zoo 15:55, 9 ביוני 2008 (IDT)

הערה - מצביעים לפונקציות[עריכה]

בעת קריאה לפונקציה ע"י מצביע, אין צורך לציין את סימן הכתובת (&), היות שהפונקציה בעצמה היא כתובת.

דוגמה:

#include <stdio.h>

float power(int num1,int num2)
{
  float result;
  if (num2 == 0)
     return 1;
  if (num1 != 1)
      result = num1 * power(num1, num2 - 1);
  else
      result = num1;
  return result;
}

int main()
{
    float (*p)(int, int) = power; // ללא סימן הכתובת (&)
    printf("%.3f", p(2, 3));

    getchar();
    return 0;
}

Matanel11111 - שיחה 12:06, 27 בספטמבר 2013 (IDT)

מצביע למערך[עריכה]

שלום! רציתי לדעת כיצד אפשר להגדיר מצביע למערך דו מימדי ניסיתי המון זמן ולא הלך לי תודה

מוזמנ/ת לעלות כשיהיה פתרון או לתייג את יוצר הספר אם עוד באתר...בהצלחה, --‏Illuyanka‏ 15:51, 16 ביוני 2019 (IDT)