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

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

アレサ


「ソーラーさん、


自作関数を実行して


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)

👆

int* ptx


に相当するんだね」


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









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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る