ですので変数aのアドレスに格納されている数値を表す*ptxをつかい変数aのアドレスに格納されている数値を変更することができます

ポインタ渡しが行われるときの自作関数の構造を分析してみましょう そのために自作関数の部分を元の命令文の集まりに戻してみます

アレサ


「ソーラーさん、


main関数内で定義された変数aに


格納されている数値を変更するために


ポインタ渡しをつかったプログラムを構成できました。


大成功ですね


#include <stdio.h>


void newmadefunction(int*ptx)

{

*ptx=*ptx+5;

printf("%d\n",*ptx);

}


int main (void){

int a=1;

newmadefunction(&a);

printf("%d\n",a);

return 0;

}


コンパイル結果

6

6


ソーラー「アレサ、試しに


このプログラムを自作関数をつかわない


プログラムに変更とかできるのかな?😊」


アレサ「?


もちろんできますとも😊


そもそも自作関数とは


   🍎本来main関数内で記述されていたプログラムを🍎


       🍎 まとめただけなのですの  🍎



ですから


今のポインタ渡しをつかったプログラム


#include <stdio.h>


void newmadefunction(int*ptx)

{

*ptx=*ptx+5;

printf("%d\n",*ptx);

}


int main (void){

int a=1;

newmadefunction(&a);

printf("%d\n",a);

return 0;

}

コンパイル結果

6

6



自作関数の定義を消し


main関数内の


newmadefunction(&a);


の命令文を


自作関数の定義に沿って元に戻した


次のプログラムと全く等しくなります


#include <stdio.h>


int main (void){

int a=1;

int*ptx=&a;


*ptx=*ptx+5;


printf("%d\n",*ptx);

printf("%d\n",a);

return 0;

}


コンパイル結果

6

6


newmadefunction(&a);

と記述するだけで


int*ptx;

ptx=&a;

*ptx=*ptx+5;

printf("%d\n",*ptx);


の命令文が実行されていたというわけですの(#^^#)」


ソーラー「なあるほどね


この自作関数を自作関数の定義に沿って


main関数内に戻したプログラムの


ポインタ変数宣言


int*ptx;


の部分が自作関数の()の中で


void newmadefunction(int*ptx)


と表現されてるってわけなんだね」


アレサ「そうなっているのですの🌞 🌞 🌞」









  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます