C語言中,可以保證:
1. 所有函數都使用值傳遞:其實即使是指標,也是值傳遞。C++中引用傳遞迴結到最後仍然是值傳遞
2. 實參到形參的參數傳遞過程其實是形參的初始化(!=賦值)過程。傳遞參數時做一些運算運算式,直接按賦值初始化理解
3. 形參的範圍是函數域,它和函數內定義的其他自動變數一樣,並沒有任何特殊性。
4. 函數形式參數帶const限定符時,實參是可以成功傳遞的,這次傳遞相當於初始化。一旦初始化後,即不允許改變
5. 參數傳遞的順序是從右至左。
例子一:(規則2)
#include <stdio.h>
void func(int ii)
{
printf("In func():%d\n", ii);
}
int main()
{
int i=0;
func(i++);
printf("Out func():%d\n", i);
return 0;
}
結果:
In func():0
Out func():1
可見將實參i傳入到函數形參時,即是賦值的過程。
ii = i++;
例子二:三段小程式(規則4)
#include <stdio.h>
int main()
{
int i=0;
const int j=i;
return 0;
}
此程式不會有任何問題。
#include <stdio.h>
int main()
{
int i=0;
const int j;
j=i;
return 0;
}
這段程式會有編譯錯誤!所以你必須分清初始化和賦值的關係
#include <stdio.h>
void func(const int ii)
{
printf("In func(): %d\n", ii);
}
int main()
{
int i=0;
func(i);
return 0;
}
這個程式卻無任何錯誤。
例子三:(規則5)
#include <stdio.h>
void func(int i, int j)
{
printf("In func(): i=%d\n", i);
printf("In func(): j=%d\n", j);
}
int main()
{
int i=0;
func(i, i++);
return 0;
}
結果:
In func(): i=1
In func(): j=0
#include <stdio.h>
void func(int i, int j)
{
printf("In func(): i=%d\n", i);
printf("In func(): j=%d\n", j);
}
int main()
{
int i=0;
func(i, ++i);
return 0;
}
結果:
In func(): i=1
In func(): j=1