アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語のプログラミングなのですがどなたか教えて頂けませんか。(説明も)
エラトステネスのふるいを用いて,10000 までの自然数に素数がいくつあるかを表示するプログラムを作れ。
ただし , 配列は用いず, ポインタを用いること
メモリの確保には malloを使うこと

よろしくお願いいたします。

A 回答 (1件)

「ポインタを使ってみよう!」っていう練習問題ですね。


練習問題は自分で組まなきゃ力になりません。

まあまずは、配列使ってでも「エラトステネスのふるい」プログラムを組んじゃいましょう。

それが出来たら、配列へのアクセス部分をポインタに置き換えるだけです。
C言語において、配列とポインタは同値ですので。

int p[10000]; #intの配列 p
int *q; #intを指すポインタ q
q = &p[0]; #qにp配列の先頭アドレスを代入する

こうした時、
p[0] = 10;
*q = 10;
これはどちらも配列p[0]のメモリに10を入れるという効果があります。

p[1] = 20;
*((int *)q + 1) = 20;
これはどちらも配列p[1]のメモリに20を入れるという効果があります。

ご質問の問題なら、配列へのアクセス方法をポインタ化するだけで、いいでしょう。

ただ、ポインタと言うのはメモリ上の位置だけを指すものですから、そこは自分でメモリ確保した範囲で使わなければいけません。
メモリ確保するのが、malloc(Memory Allocation)関数、開放するのが free関数です。

q = (int *)malloc(sizeof(int) * 10000);

これで、int変数10000個分のメモリを確保できます。

開放するときは

free(q);

これだけです。

でも、きちんと開放しなければ、mallocのたびにメモリを食っていき、しまいには「メモリ不足」でエラーになってしまいます。

まあ、単発のプログラムでは、プログラム終了時にそのプログラムから malloc()で確保したメモリは自動解放されてしまうので、ほとんど悪影響は無いんですけども。

ずっと動作させ続けるプログラムだと、メモリの管理は重要になってきます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!