将数字地址分配给指针

时间:2020-09-10 14:50:34

标签: c++ pointers

int *n=(int *)5;//Valid
cout<<*n;//Invalid

尽管5不是存储器位置,为什么指针n可以指向地址。 为什么我不能在屏幕上打印n值。

2 个答案:

答案 0 :(得分:3)

您正试图取消引用内存地址0x5,该地址可能是受限内存。

int *n=(int *)5;

您正在将整数文字5转换为int*。这意味着您说的是0x5是一个地址。尝试用*n取消引用该指针时,会出现错误。

相反,您需要执行以下操作:

int five = 5;
int *n = &five;
cout << *n;

不要使用(int *),请使用地址运算符&。另外请记住,除了字符串文字,您不能使用文字的地址。

答案 1 :(得分:1)

简短答案:因为n的值为n*n是值 at n:即它指向的对象。

如果要n指向值5而不是地址5,则必须这样做:

int x = 5;
int* n = &x;

现在n是值为5的堆栈位置的地址。