C言語のポインタについて詳しい人きて

サムネイル
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*てしないとダメじゃん

コメント

タイトルとURLをコピーしました