שאלה בC- טווחי הכרה

שאלה בC- טווחי הכרה

#include <stdio.h> void f1(int x); void f2(int y); int x=20, y; void main() { y=5; f1(x); f2(y); printf("main(): (x,y)=(%d, %d)\n", x,y); } void f1(int x) { printf("f1(): (x,y)= (%d,%d)\n", x,y); x=y=10; } void f2(int y) { printf("f2(): (x,y)=(%d,%d)\n", x,y); x=y=15; }​
מה שמודפס:
f1(): (x,y)= (20,5) f2():(x,y)=(20,10) main(): (x,y)= (15,10)​
את ההדפסה הראשונה הבנתי, אבל לא הבנתי למה בהדפסה השניה, x=20 ולא 15? ובהדפסה השלישית, למה y לא שווה 15? תודה :)
 

inbal76

New member
תשובה

ב-f1 הפרמטר x מסתיר את הפרמטר הגלובלי x. לכן השורה x=y=10 משנה את y הגלובלי, אבל את x הלוקלי. x הגלובלי נשאר 20. באופן דומה, ב-f2 מוסתר y הגלובלי ע"י y המקומי. לכן השורה x=y=15 משנה את x הגלובלי, אבל את y הלוקלי. y הגלובלי נשאר 10.
 
למעלה