int x = 4;
int* q = &x; // Is it always equivalent to int *q = &x; ?
cout << "q = " << q << endl; // output: q = 0xbfdded70
int i = *q; // A
int j = *(int*)q; // B, when is this necessary?
cout << "i = " << i << endl; // output: i = 4
cout << "j = " << j << endl; // output: j = 4
我的问题是A行和B行是什么,以及为什么输出都是4?指针上的这个操作是如何工作的?
是'*(INT *)问;'必要的我在某些情况下?我想不出一个,但想知道是否有这种可能性。 – qazwsx 2011-12-30 16:45:56
'(int *)q'的意思是“不管q是什么,我想把它当作一个指向int的指针”。当你想要使用数据的位布局做技巧时,这很有用。而且,C语言中的程序通常会将指针实际指向的内容隐藏起来(通过将其指向(void *))。 – 2011-12-30 17:26:12
所以用最简单的术语来说,如果'q'已经不是**或'int *','(int *)q'将是必要的。 – 2011-12-30 17:30:02