我想澄清一些概念
1-指针只能存储一个地址,指针本身不能像任何其他变量那样存储数据。对? (因为下面的代码没有运行)
int *myptr;
*myptr=20;
cout<<(*myptr);
2-如果您创建一个类的指针,请说 FOO
class foo
{
public:
int numb1 ;
char alphabet;
}
// this doesn't run
void main()
{
foo *myptr ;
cout<< myptr->numb1;
}
所以我的问题是,类foo( * myptr )的指针是否有变量 numb1 和字母?如果不是那么foo指针和int指针之间的区别是什么(除了每个指针只能指向它的相应数据类型)
答案 0 :(得分:1)
指针有足够的存储空间来包含表示内存中某个位置的数字。完全可以使用该空间来存储其他信息(信息仍然需要适合指针的存储)。
例如,您可以在指针内存储一个long值:
#include <iostream>
using namespace std;
int main() {
void *ptr;
ptr = (void*)20;
long information = reinterpret_cast<long>(ptr);
std::cout<<information<<std::endl;
return 0;
}
你可以try it out here看到它会输出数字20。
编辑:这里有一个非空类型指针
#include <iostream>
using namespace std;
struct test{int a;};
int main() {
// your code goes here
test* ptr;
ptr = (test*)20;
long information = reinterpret_cast<long>(ptr);
std::cout<<information<<std::endl;
return 0;
}