עבור לתוכן

קליטת מערך\מטריצה בפונקציה.

Featured Replies

פורסם

היי,

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

#include <Stdio.h>
#define n 4

int func()
{
int i,b[n];
for(i=0;i<n;i++)
{
printf("enter a value/n");
scanf("%d",&b[i]);
}
return (b);
}


void main ();
{
int a[n];
a=func;
for(i=0;i<n;i++)
printf("%d",a[i]);
}

פורסם

הפונקציה שלך מחזיר int, למה אתה מנסה להחזיר בה מערך? ועוד כזה שמוגדר על ה- stack?

עדיף שהפונקציה תקבל בתור פרמטר מצביע/reference למערך ותמלא אותו.

פורסם
  • מחבר

איך אני עושה את מה שאמרת(בהנחה שזה בחומר של י"א- 2 יח"ל לימוד ראשונות)?

פורסם

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

פורסם
void func(int *array, int size)
{
int i;

for(i=0;i<size;i++)
{
printf("enter value number %d:", i);
scanf("%d",&array[i]);
printf("\n");
}
}

#define SIZE 5

int main(void)
{
int a[SIZE], i;
func(a, SIZE);
for (i = 0; i < SIZE; i++)
printf("%d\n", a[i]);
}

פורסם
  • מחבר

היי, תודה רבה על הקוד. הדבר היחיד שלא ברור לי הוא למה יש כוכבית (*array) ומה היא עושה, מכיוון שכאשר אני מסיר אותה התוכנית לא עובדת.

פורסם

הגיוני שזה לא יעבוד, זה לא בשביל היופי... תקרא על העברת פרמרטים BY VALUE ו BY REFERENCE

פורסם
  • מחבר

יש לי מגן מחר- אכפת לך להסביר בקצרה? :)

פורסם

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

העברת משתנים ישירות זה BY VALUE, והעברת מצביע אליהם, כדי שתוכל לשנות אותם בתוכה, זה BY REFERENCE.

פורסם

vgcr, nmchg zv נט פםןמאקר.

העברת by ref זה בכלל ע"י & ויש את זה רק בC++.

פורסם

צודק, טעות שלי, BY VALUE ו BY POINTER

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים