את מתכוונת אם היית
מקבלת לפונצקיה numstr ולא numstr*?
אם היית מקבלת לפונקציה משתנה מסוג char, אז היית מקבלת תו בודד ולא היית יכולה לעשות איתו יותר מדי.
כשאת שולחת לפונקציה משתנים, את למעשה בונה אותם מחדש בתוך הפונקציה. יש יחידה בנאית שדואגת ליצור לך את המשתנים החדשים בפונקציה, ולהעביר אליהם בהעתקה את הערכים ששלחת.
לדוגמא:
קוד PHP:
int main()
{
int temp = 3;
num = power (temp);
printf ("num is: %d", num);
}
int power (int num)
{
return num * num;
}
את רואה שבתוך הפונקציה את מקבלת int num, אבל אין שום קשר בין המשתנה הזה, לבין המשתנה שבתוך ה main שלך (אפילו שהערכים שלהם זהים). מה שקורה בפועל זה שיש יחידה שדואגת ליצור לך את המשתנה num החדש, להקצות לו מקום כלשהו בזיכרון ולהעתיק אליו את הערך "3", כפי שהיה במשתנה num המקורי ב main.
כשאת רוצה להעביר רצף של תאים (מערך), מספיק שתעבירי את הכתובת של התא הראשון של הרצף, ואז כל מה שהפונקציה שלך תצטרך לעשות, זה להתקדם בזיכרון עוד תא ועוד תא, עד שתרצי להפסיק.
לכן, כשאת מעבירה מערך לפונקציה, את מעבירה רק את הכתובת הראשונה שלו. אין שום טעם להעביר מערך שלם (זאת אומרת, ליצור אחד חדש באותו הגודל של הישן, ולהעתיק תא-תא לפי הסדר.. זו פעולה מאוד מסובכת שאין לה אפילו אופרטור ייעודי (משהו בסגנון של arr1 = arr2... כדי להעתיק מערך למערך, את תצטרכי לבנות פונקציה שתעשה את זה בלולאה, ואם את צריכה ליצור אחד חדש שיהיה בגודל של הישן את צריכה הקצאת זיכרון דינאמי וזה כבר מתחיל ממש להסתבך).
נהוג להתייחס למערך כאל מצביע לתא הראשון.
זאת אומרת, כשאני אצור מערך [int arr[30, וארצה לגשת לתא כלשהו (נגיד התא ה 17) ואכתוב: [num = arr[17, אני למעשה אלך 17 תאים מהתא הראשון (מבחינה פיסית, אם int תופס 4 בתים, אני אתקדם 4*17 בתים החל מהכתובת בזיכרון של התא הראשון. כך שאם הכתובת של התא הראשון היא "300", כדי לקבל את הערך שבתא ה 17, אני אלך ישר לכתובת 368).
שימי לב, אגב, שבפונקציה שלי התייחסתי למצביע שקיבלת כאל משתנה עם סוגריים מרובעות ריקות, ואילו גאמבל התייחס לזה כאל מצביע.
זה 1:1 אותו הדבר. זה לא משנה אם תמחקי את הסוגריים הריקים ותשימי במקומם כוכבית (רק במקום המתאים לפני השם של המשתנה) או שתמחקי את הכוכבית ותשימי סוגריים מרובעים ריקים - זה יתן לך בדיוק את אותו הדבר
טוב, חפרתי
תקראי את החומר שחילקו בכיתה בנושא. אם את רוצה שאשלח לך את החומר שלנו, לא אכפת לי להעלות (למרות שאני בטוח שיש טונות של הסברים בנושא באינטרנט, ואני בטוח שרובם טובים יותר ממה שהביאו לנו
)
עריכה: בנוגע לשאלה שלך עם איך להמיר מספר שלם למחרוזת, זה די פשוט. את צריכה בכל פעם להפריד את המספר הגדול ביותר של ה int ולשים אותו בתחילת המחרוזת.
הבעיה היא שאת לא תמיד יודעת את גודל המספר (כמה ספרות) ולכן להתחיל לחלק ב 10, 100, 1000 יכול להיות טיפה בעייתי, אבל יש דווקא פתרון יותר מגניב לבעיה (למה מגניב? כי אם מורה / מרצה רואה ביצוע שימוש במבנה-נתונים מהסוג הזה, הוא מיד מתלהב) - שימוש במחסנית.
את עושה בכל פעם מודולו 10 למספר, ואת התוצאה שומרת במחרוזת ומתקדמת הלאה.
מחלקת את המספר ב 10 וחוזרת שוב לביצוע מודולו 10...
אחרי שסיימת את כל המספר, יש לך מחרוזת עם המספר שרצית - רק הפוך. עכשיו, כל מה שאת צריכה לעשות זה לעבור מהסוף להתחלה במחרוזת שלך, ולשים ת'מספרים במחרוזת חדשה (זה נקרא מבנה-נתונים "מחסנית" אשר למעשה מגדיר מערך כלשהו, שהערך האחרון שהוכנס אליו, יהיה הראשון לצאת (והפוך, הראשון שהוכנס אליו יהיה האחרון לצאת).
אם קיבלת לפונקציה את המספר "12345", את תפעילי בהתחלה מודולו 10, ותקבלי את התוצאה "5". תשימי את המספר הזה במחרוזת ותחלקי את המספר ב 10.
המספר החדש יהיה "1234", ושוב תעשי לו מודולו 10, ותקבלי "4". שוב תשימי את ה "4" הזה במקום המתאים במערך וכן הלאה עד שיגמר המספר (זאת אומרת, שאחרי החלוקה ב 10 נשארת עם אפס [בנקודה הזו חשוב מאוד לשים בס"א בסוף המחרוזת כדי שנסמן את הסוף שלה כמו שצריך], ואז תהיה לך מחרוזת "54321". עכשיו את צריכה ליצור מחרוזת חדשה ולשים את 1 בתא הראשון, את 2 בתא השני, את 3 בתא השלישי וכן הלאה.
קוד PHP:
for (i = 0, j = strlen (str)-1 ; i < strlen(str) ; i++, j--)
str1[i] = str[j];
וזהו, הפכת את כל התווים שבמחרוזת str והתוצאה שמורה ב str1.