cplusplus.com 教程中的“空指针”示例,我试着比较如下。为什么我们仍然需要 *
括号?当没有 *
时会发生什么?
void increase(void* data, int psize) {
if (psize == sizeof(char)) {
char* pchar;
pchar = (char*) data;
cout << "pchar=" << pchar << endl;
cout << "*pchar=" << *pchar << endl;
//++(*pchar); // increases the value pointed to, as expected
++(pchar); // the value pointed to doesn't change
} else if (psize == sizeof(int)) {
int* pint;
pint = (int*) data;
//++(*pint); // increases the value pointed to, as expected
++(pint); // the value pointed to doesn't change
}
}
int main() {
char a = 'x';
int b = 1602;
increase(&a, sizeof(a));
increase(&b, sizeof(b));
cout << a << ", " << b << endl;
return 0;
}
接受解决方案后更新)我试图根据@Cody Gray 的回答弄清楚我没有得到什么。 pchar
的地址递增以指向无意义的位置。但是因为 main
中的变量 a
是 cout
而不是 pchar
,所以这个 cout
仍然打印出一个有点有意义的值(在本例中为“x”)。
最佳答案
*
运算符取消引用指针。
因此,这段代码:
++(*pint)
增加 pint
指向的值。
相比之下,这段代码:
++(pint)
增加指针本身,pint
。这就是指针指向的值不会改变的原因。您不是在更改指针指向的值,而是在更改指针本身的值。
递增一个指针会导致它指向内存中一个完全不同的值。在这种情况下,由于您只为单个整数分配了空间,因此它将指向一个无意义的值。
关于c++ - 递增指针时带或不带星号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10592338/