X



C言語のポインタわかったわ!!!!
■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:05:32.790ID:7Jt4Z+cp0
すげーだろ
0002以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:07:31.171ID:7Jt4Z+cp0
これをかけたらもう完全に理解してるやろ

int *p;
int a = 11;
p = &a;
*p = 22;
return a;
0003以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:09:27.689ID:X0O8zIM10
まずは第一歩だね!
0004以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:11:18.833ID:YG4GgL8+0
凄いけど今使うの?
ポインタってパソコンが貧弱だった頃のロストテクノロジーでしょ
今のつよつよPCで出番あるの?
0005以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:12:06.539ID:7Jt4Z+cp0
>>4
それは流石に…
参照渡しぐらいあるじゃん
0006以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:12:51.358ID:c3cp4zRi0
あとはポインターの足し算引き算
ポインターと多次元配列の関係が理解出来てればOK
0007以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:13:12.360ID:JVK2ILXB0
ポインタはmallocとかと組み合わせてからが本領
0009以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:14:58.491ID:YG4GgL8+0
シューティングゲームとかでリストでしか使った事無いから分からないな
今だと強引に配列とforで回してもそんなに処理落ちしないでしょ
0010以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:15:45.231ID:7Jt4Z+cp0
>>6
多次元配列はわからんなぁ
ポインタの配列作るの?
0011以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:16:18.995ID:/n3UEBCf0
>>4
ぬるぽ
0012以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:17:17.653ID:7Jt4Z+cp0
>>7
何もみずに書いてみたけど合ってる?

int *a = malloc(20);
*a = "Hello";
printf("%s", *a);
0013以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:18:20.741ID:7Jt4Z+cp0
>>8
cってそのへんのデータ構造自分で実装することになるから勉強になるよな
他の言語だと勉強にならん
0014以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:18:43.076ID:/n3UEBCf0
>>12
あってないです
0015以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:19:54.379ID:7Jt4Z+cp0
>>9
うーん。
シューティングゲームで敵のオブジェクトの配列を処理するときに、ポインタ渡すとかある気がする
最近の言語でも大体これと同等のことやる気がする
毎フレームオブジェクトを複製してたら詰まない?
0016以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:20:06.790ID:c3cp4zRi0
>>12
合ってない
まずmallocの戻り値はvoid*だから、変数へ代入する前にキャストしなきゃ
それからせっかくmallocしたのが次の代入でムダになってる
これ典型的なメモリーリークだから
0017以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:20:07.294ID:7Jt4Z+cp0
>>14
まじか!どうすんだ
0018以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:22:13.414ID: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'
0019以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:23:16.139ID:xC1my7e70
WINAPIとかによくある返り値とは別になんか出力する用のポインタ渡すやつ
0020以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:24:15.469ID:7Jt4Z+cp0
そうかぁ
これだと"Hello"がデータ領域にあるからヒープ領域指し示してないのか
たしかにメモリリークしてるわ
やべー
全然Cわかってねぇ


int *a = malloc(20);
*a = "Hello";
printf("%s", *a);
0021以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:25:04.107ID:7Jt4Z+cp0
mollocで獲得したヒープ領域にデータ書き込むのってどうしたら良いんだ、
なんか完成あるのか??
strcpyとかあったっけ?
0022以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:26:45.471ID:7Jt4Z+cp0
これでどうや!
おじいちゃん!添削たのむ

char *a = molloc(20);
strcpyn(*a, "Hello", 6);
print("%s", *a);
0023以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:26:48.905ID:c3cp4zRi0
>>18
strncpy()かmemcpy()を使う
セキュリティーホール作りやすいところだから慎重に
詳しくはman string_copying

危険すぎるのでいまは直接malloc()やstrncpy()を叩いたりしないかもしれない
可変長文字列を安全に扱ってくれるライブラリーを利用すべきだと思う
0024以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:27:51.677ID:7Jt4Z+cp0
>>23
たしかに危険だね
びっくりしたわ
こんな簡単にメモリリークするとは…
0025以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:29:30.764ID:/n3UEBCf0
C言語はウホホウホホと言いながら石器でなんでも作れるような原始人のおっさんに任せて
新人はモダンな言語を扱うべき
0026以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:30:50.959ID:7Jt4Z+cp0
>>25
俺も原始人になりたい
石器で全てを作りたいんだよ
0027以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:31:00.305ID:c3cp4zRi0
>>22
strncpyがstrcpynになってるのはご愛嬌として
第3引数の"6"が間違ってたらたちまちセキュリティーホールと化す
ASCII文字列の場合は数えれば5文字+NUL文字だと分かるが、国際化文字列だとどうしようもない
文字列処理はC言語の鬼門だから、もっと慣れてからでもいいと思う
0028以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:32:09.564ID:c3cp4zRi0
>>26
Linuxカーネル開発に飛び入りできるような天才でなければ
C言語には泥みたいな仕事しか残ってないよ
0029以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:32:48.876ID:QztjJdG60
書く仕事はなくても読む仕事がある
0030以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:33:34.882ID:BvYw728L0
俺はポインタは理解しても1週間で忘れる
0031以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:34:03.678ID:BvYw728L0
そもそもPythonで良いし
0032以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:34:56.501ID:t3/BaEAc0
昨年に理解したけどもうさっぱりだわ
0033以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:36:20.097ID:7Jt4Z+cp0
>>27
今回は6で合ってるよね?
mollocで20 Bytes文確保して
5Bytesコピーして最後に\0を追加してるから
合ってるよね?
0034以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:36:49.275ID:7Jt4Z+cp0
>>28
Linuxカーネルの開発がしたい
泥仕事はやりたくない
0035以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:37:18.554ID:X0O8zIM10
原始人が根気と時間を掛けてできるのは火起こしまで
電子レンジ高圧鍋使いたかったらライブラリ使え
0036以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:37:27.231ID:7Jt4Z+cp0
>>32
それな
俺も何回か挑戦してるけど毎回わからんなくなる
昨日からまた再挑戦してる
0037以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:39:23.119ID:7Jt4Z+cp0
でもさ、C言語ってかっこよくない??
GNUとかほとんどCで実装されてるしすごいじゃん
0038以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:39:36.835ID:tBfHZfdA0
>>22
ハズレ
0039以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:40:10.393ID:7Jt4Z+cp0
Rustは流行ってるけど、RustでUnixを再実装とかまだ出来てなくない??
結局Cじゃん
0040以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:40:16.052ID:FthCPwL60
デバイスドライバ作ってたとき、カーネルモードでのある処理の仕方が解らなくて似たようなことやってるカーネルのある部分のソースを追っかけたことはあった
0041以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:41:06.239ID:c3cp4zRi0
>>33
ソースがUTF-8でエンコードされていると仮定すれば
もしもこのソースが1文字=1バイトでないエンコーディングでセーブされたら、もう正しくなくなってしまう
要はソースの中に文字列リテラルや"6"みたいな数字を書いてはいけないってことよ
0042以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:42:44.727ID:VbLXBZXY0
実際のコードでそのへん触っことないわ
組み込みとかで使うんかな?
0043以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:43:08.901ID:7Jt4Z+cp0
>>41
な、なるほど、文字コードのバイト数まで考えなきゃいけないのかぁ
なるほど、strlenで文字列の長さ取ってきてstrncpyしたらいいの?
0044以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:43:24.843ID:BgLSZkGL0
いまどきCってどんな感じの仕事になるんだろ
MS-DOS時代とかって印象が強いわ
0045以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:44:53.031ID:/n3UEBCf0
>>44
石器時代の言語だから石に近いところ
0046以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:45:19.873ID:7Jt4Z+cp0
>>45
カッケー
0047以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:45:33.753ID:7Jt4Z+cp0
俺も石に近いところで仕事したい!!
0048以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:46:40.760ID:BgLSZkGL0
>>45
アセンブラじゃなくCじゃなきゃいけない
って仕事がどうもピンとこないんだよね
0049以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:47:29.042ID:7Jt4Z+cp0
てか、みんなが毎日叩いてるlsコマンドだってCで実装されてるんだぞ
MacもLinuxもFreeBSDもOpenBSDも全部ls.cで実装されてる
つまりCは毎日使われてんだよ
つまりC is God
0050以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:47:44.819ID:/n3UEBCf0
>>43
C言語における文字列の構造(ヌル終端文字列)を勉強し直すように
「番兵法」も一緒に勉強しておくと良い
0051以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:48:34.951ID:c3cp4zRi0
組み込みと言っても千差万別よ
Linuxカーネル乗っけたような大げさな「組み込み」もあるから
洗濯機や炊飯器でmallocみたいな動的メモリー割り当ては使わんだろうなあ
もっと安全で、再現性のあるメモリ管理ライブラリ作って使うと思う
組み込みとは違うけどメモリーが貴重な状況、
例えばLinuxカーネルの中には、メモリ割り当て関数がいくつもある
用途ごとに異なるメモリ割り当てのアルゴリズムを使って最適化してる
0052以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:52:35.010ID:7Jt4Z+cp0
車載とかってどうなんだろうね
これから自動運転する中で車にもLinuxが搭載されると思うんだけど、そうなったら俺のC言語の才能が爆発して、超すごい車作れるかもしれないじゃん
0053以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:54:14.911ID:NFgW7R3Ia
>>2
何したいかまったく意味不明で草
0054以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:55:42.245ID:c3cp4zRi0
Windows搭載してる車種もわりと多い
0056以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:57:20.949ID:7Jt4Z+cp0
えー
windowsになるのぉ
それじゃあつまらなくて誰も買わんよ
せめてFreeBSDにしてよ
0057以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/24(土) 23:57:51.535ID:/n3UEBCf0
関数ポインタの配列
0059以下、5ちゃんねるからVIPがお送りします
垢版 |
2024/02/25(日) 00:00:08.236ID:cjh9Ez/X0
int* a,b;
int n = 123;
a = &n
b = a;
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況