これで、参照渡し的な、値渡しを表現しました。 #include int dast(int x, int y) { int temp; temp = x; x = y; y = temp; return x; } int dast1(int x, int y) { int temp; temp = x; x = y; y = temp; return y; } int main(void) { int a,b; scanf("%d %d", &a, &b); dast(a, b); printf("%d %d", a, b); printf("%d",dast(a,b)); printf("%d", dast1(a, b)); return 0; } 関数内でのみ有効である証明?といいますか。
すごくよくわかりました!こうやって、動画で可視化していただくと、自分の頭の中でしなくてはならないことを動画の中でやっていただけているので理解も早いですね!
視覚情報にすると記憶にも残りやすいですよね
Cはどんな時もポインタ使う時は記号使わないといけなかったけど、C++になると参照とかいう便利なものが登場して記号で混乱しなくて良くなったから革命的だよなあ
見やすくて便利ですよね。
今ちょっとC言語書いてたので助かりました!!ありがとうございます!!!
freeしてくれメンス・・・
@@キバさんのゲームチャンネル ??
Rustと違ってメモリ管理が安全ではないので、解放しないとやばいことになりますね笑笑
分かりやすかったからチャンネル登録しました
ありがとうございます!
本にはメモリの番地が難しく書かれてて逆に
訳が分からなくなって諦めましたw
厳密に書かれすぎていると、理解しづらいですね
ポインタのポインタが出てくると更に頭がおかしくなるやつ
更にポインタのポインタのポインタが出てくると、、、
ポインタってとある型のインスタンスが存在することが確定されているとき、そのインスタンスを指し示す。
1を足せば、その足し算が許容されている限りにおいて、あるべき値が存在すべきアドレスを示す。
これでいい?
やばいほどわかりやすい、x = y ってコピーだったってことを初めて知った。今までxはyだからx使う時はy使ってねって意味かと思ってた
わかりやすい
アスタリスクがなんで付いてるかわからなかったけどポインタのだったか、
ポインタに1を足す意味がわからない。
ポインタが示すアドレスよりもポインタの元の変数の種類で1つ分後ろのアドレスを参照するといった処理がしたいときにやるやつかな?
@@kazuselen そこになにもなかったら、どうなんの?
@@Arsche 初期化されてない場合何が入ってるかはわからないとしか……
@@Arsche言葉遣い改めろあとggrks
@@Arsche未定義動作なので何が起こるか分からない
アドレスレジスタとデータレジスタって感じでアセンブラ書いてた頃の方が分かり易いよね(でも手間かかるけどねw)
アセンブラからc学ぶと解りづらいんですよね…。
逆にcを学んでからアセンブラを学ぶとポインタとかこういう意味だったのか!
となるのかもしれない。
先頭アドレスとポインタの違いがわからないので教えてください
先頭アドレス…あるデータ構造(例えば配列)の最初の要素を指し示すアドレス
ポインタ…アドレスを保存するために使用される変数
つまり、先頭アドレスは特定の位置のアドレスであり、ポインタはそのようなアドレスを保持するための変数です。
排他的論理OR 使えばテンポラリ変数使わなくてもスワップできますね。
(引き算だけで同様にできたと思うけど)
むしろ、配列のイメージなの?
うん
実数渡しと参照渡しかしら。
参照渡しじゃなくて、ポインタ渡しだと思います!(参照渡しはまだあまり理解してないです…)
プログラムカウンターに少し似てる
これで、参照渡し的な、値渡しを表現しました。
#include
int dast(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
return x;
}
int dast1(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
return y;
}
int main(void)
{
int a,b;
scanf("%d %d", &a, &b);
dast(a, b);
printf("%d %d", a, b);
printf("%d",dast(a,b));
printf("%d", dast1(a, b));
return 0;
}
関数内でのみ有効である証明?といいますか。