C言語のポインタわかったわ!!!!

サムネイル
1 : 2024/02/24(土) 23:05:32.790 ID:7Jt4Z+cp0
すげーだろ
2 : 2024/02/24(土) 23:07:31.171 ID:7Jt4Z+cp0
これをかけたらもう完全に理解してるやろ

int *p;
int a = 11;
p = &a;
*p = 22;
return a;

3 : 2024/02/24(土) 23:09:27.689 ID:X0O8zIM10
まずは第一歩だね!
4 : 2024/02/24(土) 23:11:18.833 ID:YG4GgL8+0
凄いけど今使うの?
ポインタってパソコンが貧弱だった頃のロストテクノロジーでしょ
今のつよつよPCで出番あるの?
5 : 2024/02/24(土) 23:12:06.539 ID:7Jt4Z+cp0
>>4
それは流石に…
参照渡しぐらいあるじゃん
11 : 2024/02/24(土) 23:16:18.995 ID:/n3UEBCf0
>>4
ぬるぽ
6 : 2024/02/24(土) 23:12:51.358 ID:c3cp4zRi0
あとはポインターの足し算引き算
ポインターと多次元配列の関係が理解出来てればOK
10 : 2024/02/24(土) 23:15:45.231 ID:7Jt4Z+cp0
>>6
多次元配列はわからんなぁ
ポインタの配列作るの?
7 : 2024/02/24(土) 23:13:12.360 ID:JVK2ILXB0
ポインタはmallocとかと組み合わせてからが本領
12 : 2024/02/24(土) 23:17:17.653 ID:7Jt4Z+cp0
>>7
何もみずに書いてみたけど合ってる?

int *a = malloc(20);
*a = "Hello";
printf("%s", *a);

14 : 2024/02/24(土) 23:18:43.076 ID:/n3UEBCf0
>>12
あってないです
17 : 2024/02/24(土) 23:20:07.294 ID:7Jt4Z+cp0
>>14
まじか!どうすんだ
16 : 2024/02/24(土) 23:20:06.790 ID:c3cp4zRi0
>>12
合ってない
まずmallocの戻り値はvoid*だから、変数へ代入する前にキャストしなきゃ
それからせっかくmallocしたのが次の代入でムダになってる
これ典型的なメモリーリークだから
18 : 2024/02/24(土) 23:22:13.414 ID:7Jt4Z+cp0
>>16
どうしたらいいの?こんな感じ?

void *a = molloc(20);
a[0] = 'H'
a[1] = 'e'
a[2] = 'l'
a[3] = 'l'
a[4] = 'o'
a[5] = '\0'

8 : 2024/02/24(土) 23:14:15.842 ID:FthCPwL60
線形リストが大好物♥
13 : 2024/02/24(土) 23:18:20.741 ID:7Jt4Z+cp0
>>8
cってそのへんのデータ構造自分で実装することになるから勉強になるよな
他の言語だと勉強にならん
9 : 2024/02/24(土) 23:14:58.491 ID:YG4GgL8+0
シューティングゲームとかでリストでしか使った事無いから分からないな
今だと強引に配列とforで回してもそんなに処理落ちしないでしょ
15 : 2024/02/24(土) 23:19:54.379 ID:7Jt4Z+cp0
>>9
うーん。
シューティングゲームで敵のオブジェクトの配列を処理するときに、ポインタ渡すとかある気がする
最近の言語でも大体これと同等のことやる気がする
毎フレームオブジェクトを複製してたら詰まない?
19 : 2024/02/24(土) 23:23:16.139 ID:xC1my7e70
WINAPIとかによくある返り値とは別になんか出力する用のポインタ渡すやつ
20 : 2024/02/24(土) 23:24:15.469 ID:7Jt4Z+cp0
そうかぁ
これだと"Hello"がデータ領域にあるからヒープ領域指し示してないのか
たしかにメモリリークしてるわ
やべー
全然Cわかってねぇ

int *a = malloc(20);
*a = "Hello";
printf("%s", *a);

21 : 2024/02/24(土) 23:25:04.107 ID:7Jt4Z+cp0
mollocで獲得したヒープ領域にデータ書き込むのってどうしたら良いんだ、
なんか完成あるのか??
strcpyとかあったっけ?
22 : 2024/02/24(土) 23:26:45.471 ID:7Jt4Z+cp0
これでどうや!
おじいちゃん!添削たのむ

char *a = molloc(20);
strcpyn(*a, "Hello", 6);
print("%s", *a);

27 : 2024/02/24(土) 23:31:00.305 ID:c3cp4zRi0
>>22
strncpyがstrcpynになってるのはご愛嬌として
第3引数の"6"が間違ってたらたちまちセキュリティーホールと化す
ASCII文字列の場合は数えれば5文字+NUL文字だと分かるが、国際化文字列だとどうしようもない
文字列処理はC言語の鬼門だから、もっと慣れてからでもいいと思う
25 : 2024/02/24(土) 23:29:30.764 ID:/n3UEBCf0
C言語はウホホウホホと言いながら石器でなんでも作れるような原始人のおっさんに任せて
新人はモダンな言語を扱うべき
26 : 2024/02/24(土) 23:30:50.959 ID:7Jt4Z+cp0
>>25
俺も原始人になりたい
石器で全てを作りたいんだよ
28 : 2024/02/24(土) 23:32:09.564 ID:c3cp4zRi0
>>26
Linuxカーネル開発に飛び入りできるような天才でなければ
C言語には泥みたいな仕事しか残ってないよ
29 : 2024/02/24(土) 23:32:48.876 ID:QztjJdG60
書く仕事はなくても読む仕事がある
30 : 2024/02/24(土) 23:33:34.882 ID:BvYw728L0
俺はポインタは理解しても1週間で忘れる
31 : 2024/02/24(土) 23:34:03.678 ID:BvYw728L0
そもそもPythonで良いし
32 : 2024/02/24(土) 23:34:56.501 ID:t3/BaEAc0
昨年に理解したけどもうさっぱりだわ

コメント

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