נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: פונקציות ב-C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
יוני
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 August 2006 בשעה 17:04 | IP רשוּם
ציטוט יוני

אם אני משנה את אחד הפרמטרים שהפונקציה שלי מקבלת (בשפת C) ואני רוצה שהשינוי הזה ישמר ויהיה גם בפונקציה הקוראת במשתנה המקורי איך אני עושה את זה (חוץ ממערכים שאני יודע שאם מעבירים אותם כפרמטרים אז אם משנים אותם בפונקציה אז גם המערך המקורי משתנה בכל מקרה גם בלי לעשות משהו מיוחד)?

ופונקציה ב-C יכולה להחזיר ערכים מכל הסוגים של הטיפוסים כולל סוגים שאני כותב בtypedef וכולל מערכים, מבנים, רשימות מקושרות... או שפונקציה יכולה להחזיר ערכים רק מסוגים מסויימים של טיפוסי נתונים? 

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 August 2006 בשעה 20:07 | IP רשוּם
ציטוט אורח

בשביל לשנות ערך של משתנה בעזרת פונקצייה, אתה צריך לשלוח אל הפונקצייה את הכתובת של המשתנה בזכרון, זאת אומרת פוינטר. תקרא על pointers בשפת C.

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

הצטרף / הצטרפה: 26 May 2006
מדינה: Israel
משתמש: מנותק/ת
הודעות: 103
נשלח בתאריך: 11 August 2006 בשעה 13:42 | IP רשוּם
ציטוט yiag

תשים & לפני שם הפרמטר למשל:

קוד:

int f(int &a)

חזרה לתחילת העמוד הצג את כרטיס החבר של yiag חפש הודעות אחרות של yiag
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 11 August 2006 בשעה 14:10 | IP רשוּם
ציטוט אלצ'קו

יוני כתב:
אם אני משנה את אחד הפרמטרים שהפונקציה שלי מקבלת (בשפת C) ואני רוצה שהשינוי הזה ישמר ויהיה גם בפונקציה הקוראת במשתנה המקורי איך אני עושה את זה (חוץ ממערכים שאני יודע שאם מעבירים אותם כפרמטרים אז אם משנים אותם בפונקציה אז גם המערך המקורי משתנה בכל מקרה גם בלי לעשות משהו מיוחד)?

הפונקציה צריכה לקבל מצביע למשתנה, במקום את הערך שלו. לדוגמה:

קוד:
#include <stdio.h>

void f(int* pi)
{
    *pi = *pi + 3;
}

int main(void)
{
    int i;
    int* pi;
    pi = &i;
   
    i=5;
    printf("%d\n", i);
   
    f(pi);
    printf("%d\n", i);

    return 0;
}

המשתנה pi הוא מצביע ל-int. זו משמעות הכוכבית בהצהרה עליו. אנחנו קובעים שהמצביע pi יצביע למשתנה i בעזרת האמפרסנד, שהוא אופרטור שמספק כתובת של משתנה.

הפונקציה f מקבלת מצביע ל-int, ולא סתם int (שוב, בגלל הכוכבית), ואליה אנחנו מעבירים את pi ולא את i. כדי לגשת לערך שאליו מצביע pi, במקום לשנות את הכתובת (כמו שעשינו בתוך main) שוב משתמשים בכוכבית. ‎*p נותן גישה לערך שאליו p מצביע, כש-p הוא מצביע בעצמו.

עכשיו כשאנחנו מבינים מה כל העסק, אפשר לכתוב את main קצת יותר בקיצור:

קוד:
#include <stdio.h>

void f(int* pi)
{
    *pi = *pi + 3;
}

int main(void)
{
    int i;
    i=5;
    printf("%d\n", i);
    f(&i);
    printf("%d\n", i);

    return 0;
}

כאן אנחנו מעבירים ל-f ישר את הכתובת, במקום ליצור משתנה נפרד.

יוני כתב:
ופונקציה ב-C יכולה להחזיר ערכים מכל הסוגים של הטיפוסים כולל סוגים שאני כותב בtypedef וכולל מערכים, מבנים, רשימות מקושרות... או שפונקציה יכולה להחזיר ערכים רק מסוגים מסויימים של טיפוסי נתונים?

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

חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 
רומי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 September 2006 בשעה 13:03 | IP רשוּם
ציטוט רומי

אני רוצה לשלוח מערך לפונקציה...אז אני יודעת שצריך להעשות את זה עם typedef

אבל אני לא יודעת איך להגדיר ...

                                                                                             

חזרה לתחילת העמוד הצג את כרטיס החבר של רומי חפש הודעות אחרות של רומי בקר בדף הבית של רומי
 
אלצ'קו
אחראי פורומים
אחראי פורומים
סמל אישי
ג2ר פ33תי

הצטרף / הצטרפה: 20 January 2006
משתמש: מנותק/ת
הודעות: 609
נשלח בתאריך: 17 September 2006 בשעה 00:00 | IP רשוּם
ציטוט אלצ'קו

תתחילי לקרוא מכאן.
חזרה לתחילת העמוד הצג את כרטיס החבר של אלצ'קו חפש הודעות אחרות של אלצ'קו
 

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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