int *n=(int *)5;//Valid
cout<<*n;//Invalid
尽管5不是存储器位置,为什么指针n可以指向地址。 为什么我不能在屏幕上打印n值。
答案 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的堆栈位置的地址。