- 締切済み
動的なメモリ領域の確保
double型変数5個分のメモリをmalloc関数により確保し,その確保した要素のアドレスを表示するように,プログラムを作る問題で、 (注)に「 %pで表示するためには,double型へのポインタ(double *)をvoid型へのポインタ(void *)にキャストする必要がある.」と書かれていたのですが、どういうことでしょうか? 以下のようでいいのでしょうか? #include<stdio.h> #include<stdlib.h> #define COUNT 5 // 動的に確保するメモリ領域数を示すマクロ定数の定義 int main(void) { // 動的に確保するメモリ領域のアドレスを保持するポインタ変数の宣言 double * pointer; int i; // for文で使用する変数の宣言 // int型変数5個分のメモリ領域を確保 pointer = (double *)malloc(sizeof(double) * COUNT); if(pointer == NULL) { // メモリ領域の確保が失敗した場合 printf("メモリ領域を確保できませんでした.\n"); exit(1); // プログラムの終了 } for(i = 0; i < COUNT; i++) printf("%d番目のアドレスは%pです.\n", i + 1, pointer + i); free(pointer); // 確保したメモリ領域の解放 return 0; }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- hashioogi
- ベストアンサー率25% (102/404)
ですから、return文の2行上に printf("%d番目のアドレスは%pです.\n", i + 1, pointer + i); という文がありますが、これを printf("%d番目のアドレスは%pです.\n", i + 1, (void*)(pointer + i)); にしたらいかがですかと言った訳です。
- hashioogi
- ベストアンサー率25% (102/404)
void*型にキャストするのが必要なのかどうかわかりませんが、書いてあるようにするんでしたら、 (void*)(pointer + i)としたらどうでしょうか ?
補足
double型変数5個分のメモリをmalloc関数により確保し,その確保した要素のアドレスを表示するように,以下のプログラムを変更せよ.(注) %pで表示するためには,double型へのポインタ(double *)をvoid型へのポインタ(void *)にキャストする必要がある. #include<stdio.h> #include<stdlib.h> #define COUNT 5 // 動的に確保するメモリ領域数を示すマクロ定数の定義 int main(void) { // 動的に確保するメモリ領域のアドレスを保持するポインタ変数の宣言 int * pointer; int i; // for文で使用する変数の宣言 // int型変数5個分のメモリ領域を確保 pointer = (int *)malloc(sizeof(int) * COUNT); if(pointer == NULL) { // メモリ領域の確保が失敗した場合 printf("メモリ領域を確保できませんでした.\n"); exit(-1); // プログラムの終了 } for(i = 0; i < COUNT; i++) printf("%d番目のアドレスは%pです.\n", i + 1, pointer + i); free(pointer); // 確保したメモリ領域の解放 return 0; } という問題でした。