- 1 : 2022/11/07(月) 22:14:01.210 ID:aBWCJgXhd
- 以下の質問したの俺だけど教えて
酔ってて日本語おかしいのは許してC言語のポインタを使った関数について質問です。以下のように関数を定義したとき、funcにはアドレスを渡しており、値渡しではないため、main関数内のaの値… – Yahoo!知恵袋 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11270687131
- 2 : 2022/11/07(月) 22:15:08.969 ID:eBMArT/o0
- 内容をはれ
- 5 : 2022/11/07(月) 22:15:47.931 ID:aBWCJgXhd
- >>2
はった! - 3 : 2022/11/07(月) 22:15:12.901 ID:zL27C0jJ0
- *と&試し打ちしていい感じに出したいもの出せたらオッケー👌
- 4 : 2022/11/07(月) 22:15:42.291 ID:aBWCJgXhd
- 内容はルワ
言語のポインタを使った関数について質問です。
以下のように関数を定義したとき、
funcにはアドレスを渡しており、値渡しではないため、main関数内のaの値が変更されるのはわかります。
しかしこの時、funcの引数*bとmainで渡した&aは型が異なるような気がします。
*bはbのアドレスに対応した値、&aはaのアドレスです。
func(&a)としたとき
int *b=&aとしたとき、これは型の整合性がとれなくないでしょうか。
int b = &aならわかるのですがvoid func(int *b){
*b = 2;
}
main(){
int a;
func(&a);
} - 6 : 2022/11/07(月) 22:16:25.417 ID:aBWCJgXhd
- 読み返してみると日本語やべーな
許して
なんとなく察して言いたいことを - 7 : 2022/11/07(月) 22:17:48.396 ID:eBMArT/o0
- 整合性取れてるから
宣言時と動作の米は意味が違う - 11 : 2022/11/07(月) 22:19:19.351 ID:aBWCJgXhd
- >>7
>>10
安価つけるのわすれてた - 8 : 2022/11/07(月) 22:18:05.538 ID:p6Et5cXR0
- int *b; のときと *b = 2; のときでは * の働きが違うのん
- 12 : 2022/11/07(月) 22:19:40.787 ID:aBWCJgXhd
- >>8
ちがうの??
>>9
それは許して察して
酔ってておかしくなってる - 9 : 2022/11/07(月) 22:18:38.668 ID:CMid6LdS0
- C言語の前に日本語どうにかしろよ
意味わからんわ - 10 : 2022/11/07(月) 22:18:40.715 ID:aBWCJgXhd
- これって関数の引数ではint 米bって宣言してるけど
実際は米bじゃなくてbに代入してるってこと? - 14 : 2022/11/07(月) 22:19:58.569 ID:AJx4PWOA0
- これって渡す時func(a)でいいんじゃなかったっけ
- 15 : 2022/11/07(月) 22:20:16.940 ID:eu6JO3rt0
- メモリのことまで気にしながら書きたくないわ
- 18 : 2022/11/07(月) 22:22:15.550 ID:aBWCJgXhd
- >>15
単純に好奇心ある
低レイヤとかアセンブリとか好きなんだよな
それならデバッグして自分で見ろって言われそうだけど
答えつかないようならそうする - 27 : 2022/11/07(月) 22:24:58.752 ID:kxXr5xs4d
- >>18
アセンブラでみるとスタック領域に取られたint aのアドレスが渡されてfancでそのアドレスの領域に2って書き込むよ - 33 : 2022/11/07(月) 22:29:35.894 ID:aBWCJgXhd
- >>27
そうかもしれんが
今回はcの実装が気になるわ - 21 : 2022/11/07(月) 22:23:10.229 ID:7WjEFfIL0
- >>15
C言語向いてないね - 17 : 2022/11/07(月) 22:21:17.173 ID:kxXr5xs4d
- 関数はアドレスを渡しててアドレスの実態に値を入れてるんだぞ
- 23 : 2022/11/07(月) 22:23:31.095 ID:aBWCJgXhd
- >>17
関数はアドレスを渡してとは?
funcは引数にポインタを期待して定義されてるように見える - 19 : 2022/11/07(月) 22:22:27.780 ID:eBMArT/o0
- int a
int *b = &a
b = &a
下2行は同じ動作
引数は上の動作と等しくなる - 25 : 2022/11/07(月) 22:24:08.086 ID:aBWCJgXhd
- >>19
まじ?????
なんでそうなるんだ
ちょっと試してみるわ - 20 : 2022/11/07(月) 22:22:27.926 ID:nPbKjlF4a
- イントポインタ型を宣言する時int*で宣言するのに
中身を参照したい時も*を使うというゴミバカアホルールのせいでこうなる - 28 : 2022/11/07(月) 22:25:10.099 ID:aBWCJgXhd
- >>20
>>22
あーなんかこの辺すごい正解に近い気がする‥
gdbとか使って確認してみるわ - 26 : 2022/11/07(月) 22:24:31.912 ID:p6Et5cXR0
- func の中で b の値を、 main の中で &a の値を出力してみて
一致していれば b に &a の値が渡されていたと推測してもいいんじゃないかしら - 32 : 2022/11/07(月) 22:29:08.802 ID:aBWCJgXhd
- >>26
そうなんだけどなんで引数でint 米bってfunc宣言時にするのかなと
ここがただのbならわかる - 37 : 2022/11/07(月) 22:31:20.111 ID:kxXr5xs4d
- >>32
funcの引数の※取っちゃうとaの値を渡すことはできるけどfunc内でaの更新はできないよ - 29 : 2022/11/07(月) 22:25:54.626 ID:eu6JO3rt0
- jsのなんかよく分からんけど型これだよな、間違っててもぶっ混むわ
てのがすき、細かいのは嫌い - 34 : 2022/11/07(月) 22:30:04.532 ID:aBWCJgXhd
- >>29
jsわかんねえ
>>30
なんだそれ - 30 : 2022/11/07(月) 22:26:05.001 ID:g0fOEAgk0
- ポインタのたとえはプリンの場所を書いたメモってのが一番好き
- 31 : 2022/11/07(月) 22:28:58.103 ID:fn4LealK0
- この日本語は一体なんだ
AIがC言語学ぼうとしてるだろこれ - 35 : 2022/11/07(月) 22:30:22.563 ID:aBWCJgXhd
- >>31
それは許して
だいぶ酔っちゃってる - 36 : 2022/11/07(月) 22:30:28.668 ID:xwWMqRRL0
- bはポインタなんだからint*てしないとダメじゃん
コメント