作用域指變數的有效範圍,由定義位置決定。
main 內變數亦為區域變數,其他函數不可存取。{} 內定義者,作用域限於該區塊。#include <stdio.h>
int n = 10; // 全域
void func1() { int n = 20; printf("func1 n: %d\n", n); }
void func2(int n) { printf("func2 n: %d\n", n); }
void func3() { printf("func3 n: %d\n", n); }
int main() {
int n = 30; // main 區域
func1(); func2(n); func3();
{ int n = 40; printf("block n: %d\n", n); } // 區塊區域
printf("main n: %d\n", n);
return 0;
}
輸出:
func1 n: 20 func2 n: 30 func3 n: 10 block n: 40 main n: 30
規則: 就近原則,小作用域遮蔽大作用域同名變數;只能從小向大查找,不能反向。
#include <stdio.h>
int s1, s2, s3; // 面積
int vs(int a, int b, int c) {
int v = a * b * c; // 體積
s1 = a * b; s2 = b * c; s3 = a * c;
return v;
}
int main() {
int v, l, w, h;
scanf("%d %d %d", &l, &w, &h);
v = vs(l, w, h);
printf("v=%d, s1=%d, s2=%d, s3=%d\n", v, s1, s2, s3);
return 0;
}
函數僅能單一返回值,需多值輸出時可利用全域變數(或指標參數)。