質問:
呼び出されるたびに 1 ずつインクリメントする自動インクリメント関数を作成します。
アイデア:
- これは、私が作成した関数が main 関数の値に影響を与えて 1 ずつインクリメントするか、値を返して main 関数内で加算することを意味します。
- つまり、一方はアドレスを関数に渡し、もう一方は値を渡します。
- アドレスを渡すということは、仮パラメータが実パラメータのアドレスを介して main 関数にアクセスできることを意味し、実パラメータの値に影響を与えます。
- 渡される値は、仮パラメータを実際のパラメータに一時的にコピーしたものにすぎません。つまり、これらは 2 つの記憶領域であり、コピー アンド ペーストと同様に、混合しても影響はありません。
- ここでは主にアドレスの送信について紹介します。
- 実パラメータは & アドレス文字を使用して、実パラメータのアドレスを仮パラメータに渡す必要があります。関数では、仮パラメータは実パラメータのアドレスを受け取るためのポインタ変数を定義する必要があります。
- 関数では、インクリメントするときに * 記号を使用する必要があります。これはコンテンツを取得する記号です。ポインタを定義するときにも使用されます。ただし、ポインタを宣言するときは、ポインタがコンテンツを取得しないことを意味します。
- *num++ を使用する場合は、(*num) で囲む必要があります。そうしないと、システムは表現したい本当の意味を認識できません。
- または、 *num = * num +1; と書くこともできます。
コードは以下のように表示されます。
#include <stdio.h>
void numplus(int* num)
{
//(*num)++;// 二选一都可
*num = *num + 1;
}
int main()
{
int num = 0;
int i;
for (i = 0; i < 5; i++)
{
numplus(&num);
printf("%d\n", num);
}
}