- 1 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:00:00.737 ID:KOvy4Yk30NIKU
- ポインタはその値が格納されてるアドレスを示すっていうのは分かった
じゃあC言語で
char *test と
char *test[100]と
char test[100] の違いってなに?
それからtestを使うとき
*testってやるときとtestでやるときと&testでやるときって何が違うの? - 2 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:00:40.144 ID:swz2lvI40NIKU
- アナルだよ
- 3 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:00:41.108 ID:zB9B97TD0NIKU
- 取り敢えず何か作れよ
そしたらわかる - 5 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:01:20.501 ID:KOvy4Yk30NIKU
- >>3
まずこの辺わからないから作れない - 4 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:01:14.222 ID:9CEQRTS/pNIKU
- ゴミしかいないからvipで聞いても無駄だぞ
- 6 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:01:29.952 ID:KOvy4Yk30NIKU
- >>4
そんなことない!きっといる! - 7 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:02:08.351 ID:alo9iYxwaNIKU
- c言語マイスターが来ました
なんで今更cなの?
- 11 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:03:06.905 ID:KOvy4Yk30NIKU
- >>7
>>10
cやりたいんだ大学で習ったし
>>8
>>9
うう - 8 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:02:12.988 ID:5Nu20k5n0NIKU
- >>1
C言語ポインタ完全制覇って本に
なんでこんなことになったのか
って経緯が全部書いてるけど…まぁちょっと難しいかな、まだね
- 9 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:02:14.311 ID:w/BIGyP9dNIKU
- 一昨年までは理解してたけどもう忘れた
- 10 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:02:34.977 ID:Q4dGfq8l0NIKU
- なんでいまさらC言語を
- 12 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:03:54.804 ID:8wAA8p9c0NIKU
- char *test testに1個アドレス値が入る。それはchar型の変数を指し示すもの
char *test[100] アドレス値の入る配列を100個分用意した
char test[100] char型の値が入る配列100個分用意した
*test testが指し示すアドレスにあるchar型の値
test 指し示すアドレス
&test testという変数のアドレス - 17 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:06:13.377 ID:KOvy4Yk30NIKU
- >>12
完全に理解したありがとう - 13 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:04:29.534 ID:gcjLiMlc0NIKU
- 1番上はchar型のポインタ変数の宣言
真ん中はchar型のポインタ変数を格納できる配列
1番下はchar型変数を格納できる配列 - 14 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:04:54.709 ID:Le9hqBya0NIKU
- *は変数のアドレス値
&はポインタ型の変数の中身を参照できる - 20 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:07:15.779 ID:Le9hqBya0NIKU
- >>14
あれこれ逆だったわ - 15 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:04:58.444 ID:LmGxHb7L0NIKU
- 配列とポインタって何が違うの?
- 16 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:05:48.023 ID:5Nu20k5n0NIKU
- >>15
ポインタじゃわかりにくいから
配列って表記にしましょうってだけだよ - 19 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:06:55.972 ID:LmGxHb7L0NIKU
- >>16
じゃた*charとchar[100]は全く同じ? - 18 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:06:55.171 ID:RNaSEpfc0NIKU
- ポインタはインデックス
- 21 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:07:18.134 ID:8wAA8p9c0NIKU
- 配列は値が入る領域を複数確保したもの
ポインタはその配列のうちどこかを指し示すもの - 24 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:09:23.622 ID:LmGxHb7L0NIKU
- >>21
ポインタを定義して[]でアクセスするのと配列を定義して[]でアクセスするのってなんか変わるの? - 29 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:12:41.201 ID:8wAA8p9c0NIKU
- >>24
ポインタ自体は一つの変数でアドレスを指し示すもの
それを配列のように表現ができる
配列の[10]と指定した場合はその位置における値をアクセスできる
配列[i]とポインタ[i]は似て非なるもの
結果的に同じようなことができるがポインタを使った場合はもっと広範囲の応用が利く - 35 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:18:09.159 ID:LmGxHb7L0NIKU
- >>29
多次元配列として使うとき以外に具体的に配列とポインタだとどんな違いが出る? - 37 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:20:07.582 ID:8wAA8p9c0NIKU
- >>35
関数の引数または戻り値でポインタを使うと表現が簡単になる
これで配列のアドレスを関数に簡単に渡すことができる - 38 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:23:00.840 ID:LmGxHb7L0NIKU
- >>37
配列のままでもポインタとして使えないの? - 40 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:27:39.375 ID:8wAA8p9c0NIKU
- >>38
配列のまま関数の引数にするとそれらはすべてスタックに積まれるので膨大な領域を必要とする
だからポインタ変数を使ってアドレスだけ渡す - 42 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:28:23.723 ID:LmGxHb7L0NIKU
- >>40
配列を渡す時って参照渡しじゃないの? - 45 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:29:29.921 ID:8wAA8p9c0NIKU
- >>42
配列名でもアドレス渡しになる
ポインタ変数と同じ
配列そのものを渡そうとするととんでもないことになる - 47 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:30:17.060 ID:LmGxHb7L0NIKU
- >>45
それなら配列でもポインタでも同じじゃないのか?
何が違うのかわからん - 48 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:32:05.132 ID:8wAA8p9c0NIKU
- >>47
いくつか同じような配列があってそれらを条件によって使い分ける場合
配列の先頭値をポインタ変数に入れてやる
そうすれば短いコードで済むようになる - 50 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:33:21.665 ID:LmGxHb7L0NIKU
- >>48
その入れる変数は配列の変数でも動作は変わらない? - 54 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:38:20.354 ID:lnKq+5SV0NIKU
- >>47
配列でないとできないことはないのでは?
ポインタがないとできないことは色々あるけど配列でないとできないこと何かあるか?
- 56 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:39:22.798 ID:lnKq+5SV0NIKU
- >>47
書き忘れた配列のほうがコードが理解しやすいから
それが配列のメリット - 22 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:07:24.447 ID:KgofFiav0NIKU
- ポインタが理解できない奴はイマジネーション力が足りない
AVばっか見てないで妄想オ●ニーもすべき - 23 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:08:16.166 ID:YZ6S5mwUdNIKU
- ポインタは住所
参照はワームホール - 25 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:10:20.551 ID:z0aMFUjsrNIKU
- ポインタはメモリアドレスから直接アクセスする手段
- 26 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:10:23.576 ID:5Nu20k5n0NIKU
- なんか本当に忘れちゃったな
勉強って意味あんのかな
もう一度テキスト見れば思い出すんだろうけど - 30 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:12:54.728 ID:Le9hqBya0NIKU
- >>26
忘れてもテキスト見ればすぐ思い出せるだろ
長期記憶って簡単に忘却できるものじゃないし勉強は意味あるよ - 27 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:11:20.423 ID:gcjLiMlc0NIKU
- ポインタ分かればtest[100]は100[test]って書いても問題ないってのも理解できる
- 28 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:12:35.523 ID:5Nu20k5n0NIKU
- >>27
それ知ったときは結構衝撃だよね - 34 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:16:54.515 ID:cm7m8J30aNIKU
- >>27
IOCCCへの道か - 36 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:18:41.279 ID:774xgUSIaNIKU
- >>34
あれまだやってんの?
大体defineとfor地獄のイメージなんだけど - 49 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:32:57.965 ID:lnKq+5SV0NIKU
- >>27
え?こんなの通るのか?
ポインタ理解してても、これがエラーにならないのは納得できんが - 31 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:13:40.217 ID:774xgUSIaNIKU
- これが分かれば構造体に関数のポインタぶち込んだ時どうなるのかもわかるぞ
素直にクラス使えよって話だがC言語縛りなら致し方ない - 33 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:15:57.464 ID:gcjLiMlc0NIKU
- まあ最近のコンパイラは誘導変数削除っていう配列をポインタで置き換える最適化を勝手にやってくれるからあんまり気にしなくても良いんだけどね
ポインタ使うと実際のアドレス計算をちょっと楽にできて速くなるよってお話 - 39 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:26:18.301 ID:LmGxHb7L0NIKU
- よくわからないんだが配列の方が多次元配列のアクセス記法が使えて上位互換なの?
- 41 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:28:20.958 ID:5Nu20k5n0NIKU
- >>39
いや
ダブルポインタ使えばいいだけ - 43 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:29:14.001 ID:LmGxHb7L0NIKU
- >>41
シングル?ポインタと1次元配列、ダブルポインタと2次元配列ってなんか違うの? - 46 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:30:07.013 ID:5Nu20k5n0NIKU
- >>43
一緒なんだけど
ダブルポインタを使ったほうが頭の体操になっていい
思考が立体的になる - 44 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:29:22.668 ID:774xgUSIaNIKU
- もはやアセンブリの領域に行ってない?
詳しく内部の動き説明したらそうならざるを得ないけどさ - 51 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:33:34.932 ID:Mju+tDo10NIKU
- > typeof(10[d])
'undefined'
> typeof(d)
'object'通んないぞ
- 52 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:36:13.995 ID:LmGxHb7L0NIKU
- char a[]、char *aって定義してあるときにaって書いたときに得られるものはどっちも同じ?
- 55 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:38:58.917 ID:8wAA8p9c0NIKU
- >>52
同じ - 57 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:41:12.463 ID:b2G/lmlSMNIKU
- ポインタはポインタであってアドレスではない
- 60 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:42:26.399 ID:8wAA8p9c0NIKU
- >>57
組み込みの場合ほとんどアドレスになるけど - 61 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:44:13.053 ID:b2G/lmlSMNIKU
- >>60
処理系によっては結果的にそうなるとしてもC言語の話なら別物なので
例え話にしてもかえって混乱させる原因になってると思う - 59 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:42:25.752 ID:Mju+tDo10NIKU
- ワイは中卒で頭悪いからビルトインモジュールやイテレータ使うのに配列あったほうが良い。
Cと違ってガベージコレクタがあるし(すまんな^^) - 62 名前:一般よりも上級の名無しさん 投稿日時:2020/10/29(木) 17:44:15.225 ID:gcjLiMlc0NIKU
- int a[100];
for (int i = 0; i < 100; i++) a[i] = i;
printf(“%d\n”, 15[a]);で書いてコンパイルしてみ
ちゃんと通るし15って出力されるよ
コメント一覧