私はC/C++の初心者であり、ポインターを学習しようとしています。ここでint型のポインターの代わりにvoidポインター
は、データ配列の要素を指し、ポインタ配列の各要素にポインタの配列を作成するための私のコードです:
#include <iostream>
using namespace std;
//Pointers reference article
//https://www.programiz.com/cpp-programming/pointers-arrays
/* Array of pointers */
const int MAX = 5;
int main(){
int arr[MAX] = {1,2,3,4,5};
int* ptr[MAX];
cout << "Create the handle of each element in data array to the ptr array: " << endl;
for (int i=0; i<sizeof(arr)/sizeof(arr[0]);i++)
{
ptr[i] = &arr[i];
cout<<"ptr["<<i<<"] = " << ptr[i] << endl;
}
cout << "Display the contents of array using 1:1 ptr array:"<< endl;
for (int i=0; i<sizeof(arr)/sizeof(arr[0]);i++)
cout<<"arr["<<i<<"] = " << *ptr[i] << endl;
system ("pause");
return 0;
}
予想通り、上記のプログラムが動作します。しかし、ポインタの型をintからvoidに変更すると、ポインタ宣言時に int * ptr [MAX];のようになります。 to void * ptr [MAX];
私はこのエラーがあります:CPP(22):エラーC2100:違法間接
Line 22: cout<<"arr["<<i<<"] = " << *ptr[i] << endl
誰かがこのエラーで私を教育してくださいすることができます。前もって感謝します。
'void *'を逆参照すると、 'void'が得られます。私は本当にあなたが何をすることを期待するか分からない。 – Dolda2000
言語C/C++はありません。 1つの異なる言語CとC++。このコードは明らかにCではありません。 – Olaf
'void'ポインタの全体点は、型に関係なく(ほぼ)何かを指すことができるため、ポインタの型は不明です。 'ptr [i]'がポインタであるところの '* ptr [i]'のように)ポインタを逆参照するには、そのポインタが指しているもののタイプを知っていなければなりません。 – Peter