始めにmallocでメモリ領域を確保して、その次にポインタpが指すオブジェクトの先頭nバイトにvを代入する関数mem_setを実装しました。
その後結果を確認するために以下のようなコードを書きました。
c
1for(int i=0; i<n; i++){ 2 cout << "xp[" << i << "] = " << xp+i << ", " << *(xp+i) << endl; 3}
エラー
warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
'void*' is not a pointer-to-object type
一つ目の警告はxp+iに対して、二つ目のエラーは:(xp+i)に対して出ています。
オブジェクトへのポインタとは?
voidのような汎用ポインタはintのようなポインタと扱いが違うのでしょうか?
ソースコード
c
1#include <iostream> 2#include <cstdlib> 3using namespace std; 4 5void mem_set(void* p, int n, unsigned char v){ 6 unsigned char* cp = (unsigned char*)p; 7 while(n--) *cp++ = v; 8} 9 10int main(){ 11 int n; 12 cout << "total index: "; cin >> n; 13 void* xp = malloc(sizeof(char)*n); 14 mem_set(xp,n,0); 15 for(int i=0; i<n; i++){ 16 cout << "xp[" << i << "] = " << xp+i << ", " << *(xp+i) << endl; 17 } 18}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/07 04:35